In this notebook we conduct exploratory factor analyses (EFAs) on the datasets for our studies of concepts of mental life, in which each participants judged the various mental capacities of a particular target entity. We analyze datasets for adults and children from each of our five field sites: the US, Ghana, Thailand, China, and Vanuatu.

This notebook contains secondary analyses, parallel to the results presented in the main text, in which we dropped participants who gave the same answer on every trial. _

Adults

Samples

  country   n
       US 106
    Ghana  88
 Thailand 144
    China 120
  Vanuatu 120
    Total 578

Scale use

Factor retention: parallel analysis

Exploratory factor analysis

Factor loadings

Congruence

Bootstrapped congruence

Children

Samples

  country   n
       US 115
    Ghana 129
 Thailand 151
    China 120
  Vanuatu 128
    Total 643

Scale use

Factor retention: parallel analysis

Exploratory factor analysis

Factor loadings

Congruence

See All samples, below.

Bootstrapped congruence

All samples

Congruence

Jaccard Similarity

Developmental comparisons

Variance accounted for

Interfactor correlations

US ADULTS
          F1        F2        F3
F1 1.0000000 0.4586853 0.4210809
F2 0.4586853 1.0000000 0.2471846
F3 0.4210809 0.2471846 1.0000000

US CHILDREN
          F1        F2        F3
F1 1.0000000 0.4239758 0.2792066
F2 0.4239758 1.0000000 0.4703725
F3 0.2792066 0.4703725 1.0000000
GHANA ADULTS
            F1          F2
F1  1.00000000 -0.02438406
F2 -0.02438406  1.00000000

GHANA CHILDREN
           F1        F2         F3
F1 1.00000000 0.4827238 0.04664483
F2 0.48272382 1.0000000 0.29324830
F3 0.04664483 0.2932483 1.00000000
THAILAND ADULTS
          F1        F2        F3
F1 1.0000000 0.4088310 0.2799199
F2 0.4088310 1.0000000 0.3841636
F3 0.2799199 0.3841636 1.0000000

THAILAND CHILDREN
            F1         F2        F3          F4
F1  1.00000000 0.53498566 0.1380877 -0.01797417
F2  0.53498566 1.00000000 0.3128176  0.08785768
F3  0.13808772 0.31281764 1.0000000  0.26556955
F4 -0.01797417 0.08785768 0.2655695  1.00000000
CHINA ADULTS
          F1        F2        F3
F1 1.0000000 0.3484258 0.5276473
F2 0.3484258 1.0000000 0.2310061
F3 0.5276473 0.2310061 1.0000000

CHINA CHILDREN
          F1           F2        F3           F4
F1 1.0000000  0.419028684 0.3946064  0.065206898
F2 0.4190287  1.000000000 0.2423535 -0.004321518
F3 0.3946064  0.242353472 1.0000000  0.106091960
F4 0.0652069 -0.004321518 0.1060920  1.000000000
VANUATU ADULTS
          F1        F2
F1 1.0000000 0.5231912
F2 0.5231912 1.0000000

VANUATU CHILDREN
          F1        F2        F3
F1 1.0000000 0.2170508 0.4596587
F2 0.2170508 1.0000000 0.2567643
F3 0.4596587 0.2567643 1.0000000
LS0tCnRpdGxlOiAiQ29uY2VwdHMgb2YgbWVudGFsIGxpZmUgYWNyb3NzIGN1bHR1cmVzOiBTZWNvbmRhcnkgYW5hbHlzaXMiCnN1YnRpdGxlOiAiRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzIHVzaW5nIGZ1bGwgZGF0YXNldHMsIHRldHJhY2hvcmljIGNvcnJlbGF0aW9ucywgYW5kIG9ibGlxdWUgdHJhbnNmb3JtYXRpb25zIgphdXRob3JzOiAiKipLYXJhIFdlaXNtYW4qKiwgQ3Jpc3RpbmUgSC4gTGVnYXJlLCBSYWNoZWwgRS4gU21pdGgsIFZpdmlhbiBBLiBEem9rb3RvLCBGZWxpY2l0eSBBdWxpbm8sIEVtaWx5IE5nLCBKb2huIEMuIER1bGluLCBOaWNvbGUgUm9zcy1aZWhuZGVyLCBKb3NodWEgRC4gQnJhaGluc2t5LCAmIFRhbnlhIE0uIEx1aHJtYW5uIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQotLS0KCmBgYHtyIHNldHVwfQprbml0cjo6b3B0c19jaHVuayRzZXQobWVzc2FnZSA9IEYsIHdhcm5pbmcgPSBGQUxTRSkKYGBgCgpJbiB0aGlzIG5vdGVib29rIHdlIGNvbmR1Y3QgZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2VzIChFRkFzKSBvbiB0aGUgZGF0YXNldHMgZm9yIG91ciBzdHVkaWVzIG9mIGNvbmNlcHRzIG9mIG1lbnRhbCBsaWZlLCBpbiB3aGljaCBlYWNoIHBhcnRpY2lwYW50cyBqdWRnZWQgdGhlIHZhcmlvdXMgbWVudGFsIGNhcGFjaXRpZXMgb2YgYSBwYXJ0aWN1bGFyIHRhcmdldCBlbnRpdHkuIFdlIGFuYWx5emUgZGF0YXNldHMgZm9yIGFkdWx0cyBhbmQgY2hpbGRyZW4gZnJvbSBlYWNoIG9mIG91ciBmaXZlIGZpZWxkIHNpdGVzOiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgQ2hpbmEsIGFuZCBWYW51YXR1LiAKClRoaXMgbm90ZWJvb2sgY29udGFpbnMgc2Vjb25kYXJ5IGFuYWx5c2VzLCBwYXJhbGxlbCB0byB0aGUgcmVzdWx0cyBwcmVzZW50ZWQgaW4gdGhlIG1haW4gdGV4dCwgaW4gd2hpY2ggd2UgZHJvcHBlZCBwYXJ0aWNpcGFudHMgd2hvIGdhdmUgdGhlIHNhbWUgYW5zd2VyIG9uIGV2ZXJ5IHRyaWFsLiAKXwpgYGB7ciwgZWNobyA9IEYsIG1lc3NhZ2UgPSBGfQpzb3VyY2UoIi4vc2NyaXB0cy9kZXBlbmRlbmNpZXMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2N1c3RvbV9mdW5zLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy92YXJfcmVjb2RlX2NvbnRyYXN0LlIiKQpgYGAKCmBgYHtyfQojIGZ1bmN0aW9uIGZvciBlbGltaW5hdGluZyBwYXJ0aWNpcGFudHMgd2hvIGdhdmUgdGhlIHNhbWUgYW5zd2VyIG9uIGV2ZXJ5IHRyaWFsCmRldGVjdF9ub192YXJfZnVuIDwtIGZ1bmN0aW9uKGRmLCByZW1vdmVfbmEgPSBUKSB7CiAgCiAgZF9pZCA8LSBkZiAKICAKICBpZiAocmVtb3ZlX25hKSB7IGRfaWQgPC0gZF9pZCAlPiUgZmlsdGVyKCFpcy5uYShyZXNwb25zZSkpIH0KICAKICBkX2lkIDwtIGRfaWQgJT4lCiAgICBkaXN0aW5jdChzdWJqX2lkLCByZXNwb25zZSkgJT4lCiAgICBjb3VudChzdWJqX2lkKSAlPiUKICAgIGZpbHRlcihuID09IDEpCiAgCiAgZF9yZXMgPC0gZGYgJT4lCiAgICBmaWx0ZXIoIXN1YmpfaWQgJWluJSBkX2lkJHN1YmpfaWQpCiAgCiAgcmV0dXJuKGRfcmVzKQp9CmBgYAoKYGBge3IgZGF0YX0KIyByZWFkIGluIGRhdGEsIHNob3J0ZW4gImZlZWwgc2ljaywiIGFuZCBsaW1pdCB0byB1bml2ZXJzYWwgdGFyZ2V0cyBhbmQgcXVlc3Rpb25zOiBhZHVsdHMKZF91c19hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF91c19hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF9naF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF9naF9hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF90aF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF90aF9hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF9jaF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF9jaF9hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF92dF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF92dF9hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKCiMgcmVhZCBpbiBkYXRhLCBzaG9ydGVuICJmZWVsIHNpY2ssIiBhbmQgbGltaXQgdG8gdW5pdmVyc2FsIHRhcmdldHMgYW5kIHF1ZXN0aW9uczogY2hpbGRyZW4KZF91c19jaGlsZHJlbiA8LSByZWFkX2NzdigiLi4vZGF0YS9kX3VzX2NoaWxkcmVuLmNzdiIpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKSAlPiUKICBkZXRlY3Rfbm9fdmFyX2Z1bigpCmRfZ2hfY2hpbGRyZW4gPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF9naF9jaGlsZHJlbi5jc3YiKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkgJT4lCiAgZGV0ZWN0X25vX3Zhcl9mdW4oKQpkX3RoX2NoaWxkcmVuIDwtIHJlYWRfY3N2KCIuLi9kYXRhL2RfdGhfY2hpbGRyZW4uY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF9jaF9jaGlsZHJlbiA8LSByZWFkX2NzdigiLi4vZGF0YS9kX2NoX2NoaWxkcmVuLmNzdiIpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKSAlPiUKICBkZXRlY3Rfbm9fdmFyX2Z1bigpCmRfdnRfY2hpbGRyZW4gPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF92dF9jaGlsZHJlbi5jc3YiKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkgJT4lCiAgIyBmaWx0ZXIgb3V0IHBhcnRpY2lwYW50cyBvdXRzaWRlIG9mIHRoZSBhZ2UgcmFuZ2UKICBmaWx0ZXIoKGFnZSA+PSA2ICYgYWdlIDw9IDEyKSB8IGlzLm5hKGFnZSkpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKYGBgCgpgYGB7ciB3aWRlfQojIG1ha2Ugd2lkZS1mb3JtIGRhdGFzZXRzIGZvciBFRkE6IGFkdWx0cwpkX3VzX2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfdXNfYWR1bHRzKQpkX2doX2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfZ2hfYWR1bHRzKQpkX3RoX2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfdGhfYWR1bHRzKQpkX2NoX2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfY2hfYWR1bHRzKQpkX3Z0X2FkdWx0c193IDwtIHdpZGVfZGZfZnVuKGRfdnRfYWR1bHRzKQoKIyBtYWtlIHdpZGUtZm9ybSBkYXRhc2V0cyBmb3IgRUZBOiBjaGlsZHJlbgpkX3VzX2NoaWxkcmVuX3cgPC0gd2lkZV9kZl9mdW4oZF91c19jaGlsZHJlbikKZF9naF9jaGlsZHJlbl93IDwtIHdpZGVfZGZfZnVuKGRfZ2hfY2hpbGRyZW4pCiMgZF9naF9lbmdfY2hpbGRyZW5fdyA8LSB3aWRlX2RmX2Z1bihkX2doX2VuZ19jaGlsZHJlbikKZF90aF9jaGlsZHJlbl93IDwtIHdpZGVfZGZfZnVuKGRfdGhfY2hpbGRyZW4pCmRfY2hfY2hpbGRyZW5fdyA8LSB3aWRlX2RmX2Z1bihkX2NoX2NoaWxkcmVuKQpkX3Z0X2NoaWxkcmVuX3cgPC0gd2lkZV9kZl9mdW4oZF92dF9jaGlsZHJlbikKYGBgCgoKIyBBZHVsdHMKCiMjIFNhbXBsZXMKCmBgYHtyIHNhbXBsZXMgYWR1bHRzfQpiaW5kX3Jvd3MoZF91c19hZHVsdHMsIGRfZ2hfYWR1bHRzLCBkX3RoX2FkdWx0cywgZF9jaF9hZHVsdHMsIGRfdnRfYWR1bHRzKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGRpc3RpbmN0KGNvdW50cnksIHN1YmpfaWQpICU+JQogIGNvdW50KGNvdW50cnkpICU+JQogIGphbml0b3I6OmFkb3JuX3RvdGFscygpCmBgYAoKIyMgU2NhbGUgdXNlCgpgYGB7ciBzY2FsZSB1c2UgbWVhbiBvdmVyYWxsIGFkdWx0c30KYmluZF9yb3dzKGRfdXNfYWR1bHRzLCBkX2doX2FkdWx0cywgZF90aF9hZHVsdHMsIGRfY2hfYWR1bHRzLCBkX3Z0X2FkdWx0cykgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpLAogICAgICAgICByZXNwb25zZV9jYXQgPSByZWNvZGVfZmFjdG9yKHJlc3BvbnNlX2NhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8iID0gIm5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2luZCBvZiIgPSAia2luZCBvZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInllcyIgPSAieWVzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1pc3NpbmcgPSAibWlzc2luZyBkYXRhIikpICU+JQogIGNvdW50KGNvdW50cnksIHJlc3BvbnNlX2NhdCkgJT4lCiAgY29tcGxldGUocmVzcG9uc2VfY2F0LCBuZXN0aW5nKGNvdW50cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHJlc3BvbnNlX2NhdCwgcHJvcCkgJT4lCiAgamFuaXRvcjo6YWRvcm5fcGN0X2Zvcm1hdHRpbmcoZGlnaXRzID0gMikKYGBgCgojIyBGYWN0b3IgcmV0ZW50aW9uOiBwYXJhbGxlbCBhbmFseXNpcwoKYGBge3IgcGFyYWxsZWwgZGlzdCBhZHVsdHMsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjV9CiMgTk9URTogSGVyZSBpcyBkaXN0cmlidXRpb24gb3ZlciBvdXRjb21lcyBvZiBwYXJhbGxlbCBhbmFseXNpcyB3aXRoIDEwMCBpdGVyYXRpb25zLiBXZSdsbCBjaG9vc2UgdGhlIG1lZGlhbiBudW1iZXIgb2YgZmFjdG9ycy4KCmlmIChmaWxlLmV4aXN0cygiLi4vcmVzdWx0cy9wYV9vdXRjb21lc19kaXN0X2FkdWx0c19kcm9wLlJEUyIpKSB7CiAgCiAgcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMgPC0gcmVhZFJEUygiLi4vcmVzdWx0cy9wYV9vdXRjb21lc19kaXN0X2FkdWx0c19kcm9wLlJEUyIpCiAgCn0gZWxzZSB7CiAgCiAgcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMgPC0gZGF0YS5mcmFtZSh1cyA9IE5VTEwsIGdoID0gTlVMTCwgdGggPSBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBOVUxMLCB2dCA9IE5VTEwpCiAgCiAgc2V0LnNlZWQoNTQzMjEpCiAgbl9jb3JlcyA8LSBwYXJhbGxlbDo6ZGV0ZWN0Q29yZXMoKQogIG9wdGlvbnMobWMuY29yZXMgPSBuX2NvcmVzKQogIAogIGZvciAoaSBpbiAxOjEwMCkgewogICAgcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHNbaSwgInVzIl0gPC0gZmEucGFyYWxsZWwoZF91c19hZHVsdHNfdywgcGxvdCA9IEYpJG5mYWN0CiAgICBwYV9vdXRjb21lc19kaXN0X2FkdWx0c1tpLCAiZ2giXSA8LSBmYS5wYXJhbGxlbChkX2doX2FkdWx0c193LCBwbG90ID0gRikkbmZhY3QgICAgIAogICAgcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHNbaSwgInRoIl0gPC0gZmEucGFyYWxsZWwoZF90aF9hZHVsdHNfdywgcGxvdCA9IEYpJG5mYWN0CiAgICBwYV9vdXRjb21lc19kaXN0X2FkdWx0c1tpLCAiY2giXSA8LSBmYS5wYXJhbGxlbChkX2NoX2FkdWx0c193LCBwbG90ID0gRikkbmZhY3QKICAgIHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzW2ksICJ2dCJdIDwtIGZhLnBhcmFsbGVsKGRfdnRfYWR1bHRzX3csIHBsb3QgPSBGKSRuZmFjdAogIH0KICAKICBzYXZlUkRTKHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzLCBmaWxlID0gIi4uL3Jlc3VsdHMvcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHNfZHJvcC5SRFMiKQp9CgojIHBsb3QKcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJpdGVyIikgJT4lCiAgZ2F0aGVyKGNvdW50cnksIG5mYWN0LCAtaXRlcikgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ1cyIsICJnaCIsICJ0aCIsICJjaCIsICJ2dCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGxldmVsc19jb3VudHJ5KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbmZhY3QpKSArCiAgZmFjZXRfZ3JpZCh+IGNvdW50cnkpICsKICBnZW9tX2JhcihzdGF0ID0gImNvdW50IikgKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDEsIG1heChwYV9vdXRjb21lc19kaXN0X2FkdWx0cykgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKDAsIDEwMCwgMSkpICsKICBsYWJzKHggPSAiTnVtYmVyIG9mIGZhY3RvcnMgc3VnZ2VzdGVkIGJ5IGZhLnBhcmFsbGVsKCkiKQpgYGAKCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKYGBge3IgZWZhIGFkdWx0c30Kc2V0LnNlZWQoNTQzMjEpCgojIGRvIGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpczogYWR1bHRzCmVmYV91c19hZHVsdHMgPC0gZmFfZnVuKGRfdXNfYWR1bHRzX3csCiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBtZWRpYW4ocGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMkdXMpLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fbi5pdGVyID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX3JvdCA9ICJvYmxpbWluIikKY29sbmFtZXMoZWZhX3VzX2FkdWx0cyRsb2FkaW5ncykgPC0gcGFzdGUwKCJ1c0FEVUxUU18iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV91c19hZHVsdHMkbG9hZGluZ3MpKQoKZWZhX2doX2FkdWx0cyA8LSBmYV9mdW4oZF9naF9hZHVsdHNfdywgCiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBtZWRpYW4ocGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMkZ2gpLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fbi5pdGVyID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX3JvdCA9ICJvYmxpbWluIikKY29sbmFtZXMoZWZhX2doX2FkdWx0cyRsb2FkaW5ncykgPC0gcGFzdGUwKCJnaEFEVUxUU18iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9naF9hZHVsdHMkbG9hZGluZ3MpKQoKZWZhX3RoX2FkdWx0cyA8LSBmYV9mdW4oZF90aF9hZHVsdHNfdywgCiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBtZWRpYW4ocGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fbi5pdGVyID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX3JvdCA9ICJvYmxpbWluIikKY29sbmFtZXMoZWZhX3RoX2FkdWx0cyRsb2FkaW5ncykgPC0gcGFzdGUwKCJ0aEFEVUxUU18iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV90aF9hZHVsdHMkbG9hZGluZ3MpKQoKZWZhX2NoX2FkdWx0cyA8LSBmYV9mdW4oZF9jaF9hZHVsdHNfdywgCiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBtZWRpYW4ocGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMkY2gpLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fbi5pdGVyID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX3JvdCA9ICJvYmxpbWluIikKY29sbmFtZXMoZWZhX2NoX2FkdWx0cyRsb2FkaW5ncykgPC0gcGFzdGUwKCJjaEFEVUxUU18iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9jaF9hZHVsdHMkbG9hZGluZ3MpKQoKZWZhX3Z0X2FkdWx0cyA8LSBmYV9mdW4oZF92dF9hZHVsdHNfdywgCiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBtZWRpYW4ocGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMkdnQpLAogICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fbi5pdGVyID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX3JvdCA9ICJvYmxpbWluIikKY29sbmFtZXMoZWZhX3Z0X2FkdWx0cyRsb2FkaW5ncykgPC0gcGFzdGUwKCJ2dEFEVUxUU18iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV92dF9hZHVsdHMkbG9hZGluZ3MpKQpgYGAKCmBgYHtyIGZhY3RvciBuYW1lcyBhZHVsdHN9CmZhY3Rvcl9uYW1lc19hZHVsdHMgPC0gZGF0YS5mcmFtZShmYWN0b3IgPSBjKGNvbG5hbWVzKGVmYV91c19hZHVsdHMkbG9hZGluZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfZ2hfYWR1bHRzJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3RoX2FkdWx0cyRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9jaF9hZHVsdHMkbG9hZGluZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfdnRfYWR1bHRzJGxvYWRpbmdzKSkpICU+JQogIG11dGF0ZShhZ2VfZ3JvdXAgPSAiYWR1bHRzIikgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBjYXNlX3doZW4oZ3JlcGwoIl51cyIsIGZhY3RvcikgfiAiVVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJeZ2giLCBmYWN0b3IpIH4gIkdoYW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiXnRoIiwgZmFjdG9yKSB+ICJUaGFpbGFuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl5jaCIsIGZhY3RvcikgfiAiQ2hpbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJednQiLCBmYWN0b3IpIH4gIlZhbnVhdHUiKSwKICAgICAgICAgY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHNfY291bnRyeSkpICU+JQogIG11dGF0ZShmYWN0b3JfbmFtZSA9IGdzdWIoIl51cyIsICJVUyAiLCBmYWN0b3IpLAogICAgICAgICBmYWN0b3JfbmFtZSA9IGdzdWIoIl5naCIsICJHaC4gIiwgZmFjdG9yX25hbWUpLAogICAgICAgICBmYWN0b3JfbmFtZSA9IGdzdWIoIl50aCIsICJUaC4gIiwgZmFjdG9yX25hbWUpLAogICAgICAgICBmYWN0b3JfbmFtZSA9IGdzdWIoIl5jaCIsICJDaC4gIiwgZmFjdG9yX25hbWUpLAogICAgICAgICBmYWN0b3JfbmFtZSA9IGdzdWIoIl52dCIsICJWYS4gIiwgZmFjdG9yX25hbWUpLAogICAgICAgICBmYWN0b3JfbmFtZSA9IGdzdWIoIkFEVUxUUyIsICJhZHVsdHMiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiX0YiLCAiIEZhY3RvciAiLCBmYWN0b3JfbmFtZSkpICU+JQogIG11dGF0ZShmYWN0b3JfZGVzY3JpcHQgPSByZWNvZGUoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNBRFVMVFNfRjEgPSAiQm9keSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c0FEVUxUU19GMiA9ICJIZWFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c0FEVUxUU19GMyA9ICJNaW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdoQURVTFRTX0YxID0gIklubmVyIHNwaGVyZSAobWluZC1saWtlKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaEFEVUxUU19GMiA9ICJCb2R5LWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2hBRFVMVFNfRjMgPSAiSW50ZXJwZXJzb25hbCwgcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoQURVTFRTX0YxID0gIkJvZHktbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aEFEVUxUU19GMiA9ICJIZWFydC1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoQURVTFRTX0YzID0gIk1pbmQtbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaEFEVUxUU19GMSA9ICJIZWFydC1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoQURVTFRTX0YyID0gIkJvZHktbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaEFEVUxUU19GMyA9ICJNaW5kLWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRBRFVMVFNfRjEgPSAiSGFybW9ueSAobWluZC1saWtlLCBoZWFydC1saWtlKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dEFEVUxUU19GMiA9ICJTaW4gKGJvZHktbGlrZSkiKSwKICAgICAgICAgZmFjdG9yX2xhYmRlc2NyaXB0ID0gcGFzdGUoZ3N1YigiLipfRiIsICJGIiwgZmFjdG9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX2Rlc2NyaXB0LCBzZXAgPSAiOiAiKSkKYGBgCgojIyBGYWN0b3IgbG9hZGluZ3MKCmBgYHtyIG9yZGVyIGFkdWx0c30KIyBvcmRlciBjYXBhY2l0aWVzOiBhZHVsdHMKb3JkZXJfdXNfYWR1bHRzIDwtIGZhLnNvcnQoZWZhX3VzX2FkdWx0cykkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpvcmRlcl9naF9hZHVsdHMgPC0gZmEuc29ydChlZmFfZ2hfYWR1bHRzKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCm9yZGVyX3RoX2FkdWx0cyA8LSBmYS5zb3J0KGVmYV90aF9hZHVsdHMpJGxvYWRpbmdzW10gJT4lIHJvd25hbWVzKCkKb3JkZXJfY2hfYWR1bHRzIDwtIGZhLnNvcnQoZWZhX2NoX2FkdWx0cykkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpvcmRlcl92dF9hZHVsdHMgPC0gZmEuc29ydChlZmFfdnRfYWR1bHRzKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCmBgYAoKYGBge3IgbG9hZGluZ3MgYWR1bHRzfQojIGNvbXBpbGUgbG9hZGluZ3M6IGFkdWx0cwpsb2FkaW5nc19hZHVsdHMgPC0gYmluZF9yb3dzKAogIGxvYWRpbmdzX2Z1bihlZmFfdXNfYWR1bHRzKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiVVMiKSwKICBsb2FkaW5nc19mdW4oZWZhX2doX2FkdWx0cykgJT4lIG11dGF0ZShjb3VudHJ5ID0gIkdoYW5hIiksCiAgbG9hZGluZ3NfZnVuKGVmYV90aF9hZHVsdHMpICU+JSBtdXRhdGUoY291bnRyeSA9ICJUaGFpbGFuZCIpLAogIGxvYWRpbmdzX2Z1bihlZmFfY2hfYWR1bHRzKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiQ2hpbmEiKSwKICBsb2FkaW5nc19mdW4oZWZhX3Z0X2FkdWx0cykgJT4lIG11dGF0ZShjb3VudHJ5ID0gIlZhbnVhdHUiKSkgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpLAogICAgICAgICBjYXBhY2l0eV9vcmRfdXMgPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX3VzX2FkdWx0cyksCiAgICAgICAgIGNhcGFjaXR5X29yZF9naCA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfZ2hfYWR1bHRzKSwKICAgICAgICAgY2FwYWNpdHlfb3JkX3RoID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBvcmRlcl90aF9hZHVsdHMpLAogICAgICAgICBjYXBhY2l0eV9vcmRfY2ggPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX2NoX2FkdWx0cyksCiAgICAgICAgIGNhcGFjaXR5X29yZF92dCA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfdnRfYWR1bHRzKSkgJT4lCiAgYXJyYW5nZShjb3VudHJ5LCBmYWN0b3IsIGRlc2MoYWJzKGxvYWRpbmcpKSwgY2FwYWNpdHkpICU+JQogIG11dGF0ZShvcmRlciA9IDE6bnJvdyguKSkgJT4lCiAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMpCmBgYAoKYGBge3IgaGVhdG1hcCBhZHVsdHMsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjd9CiMgbWFrZSBoZWF0bWFwIGZpZ3VyZTogYWR1bHRzCmxvYWRpbmdzX2FkdWx0cyAlPiUKICBtdXRhdGUoZmFjdG9yX251bSA9IGFzLm51bWVyaWMoZ3N1YigiLipGIiwgIiIsIGZhY3RvcikpKSAlPiUKICBtdXRhdGUoc2FtcGxlID0gcGFzdGUoY291bnRyeSwgImFkdWx0cyIsIHNlcCA9ICJcbiIpKSAlPiUKICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2FkdWx0cykgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKGZhY3Rvcl9sYWJkZXNjcmlwdCwgZmFjdG9yX251bSksIAogICAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX3VzKSksCiAgICAgICAgICAgICAjIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKGNhcGFjaXR5X29yZF9lYykpLCAKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX2doKSksCiAgICAgICAgICAgICAjIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKGNhcGFjaXR5X29yZF90aCkpLAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfY2gpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX3Z0KSksCiAgICAgICAgICAgICBmaWxsID0gbG9hZGluZykpICsKICBmYWNldF9ncmlkKH4gcmVvcmRlcihzYW1wbGUsIGFzLm51bWVyaWMoY291bnRyeSkpLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpKSwgc2l6ZSA9IDMpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMjAsIGJhcndpZHRoID0gMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIHBhbmVsLnNwYWNpbmcueCA9IHVuaXQoMC44LCAibGluZXMiKSwKICAgICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBmYWNlID0gImJvbGQiKSkgKwogIGxhYnMoeCA9IE5VTEwsIHkgPSAiQ2FwYWNpdHkiLCBmaWxsID0gIkZhY3RvclxubG9hZGluZyIpCmBgYAoKIyMgQ29uZ3J1ZW5jZQoKYGBge3IgY29uZ3J1ZW5jZSBhZHVsdHN9CmNvbmdfYWR1bHRzIDwtIGZhLmNvbmdydWVuY2UoeCA9IGxpc3QoZWZhX3VzX2FkdWx0cyRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfZ2hfYWR1bHRzJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV90aF9hZHVsdHMkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX2NoX2FkdWx0cyRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfdnRfYWR1bHRzJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSA1KSAlPiUKICAjIGdldF91cHBlcl90cmlfZnVuKCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiZmFjdG9yX0EiKSAlPiUKICBnYXRoZXIoZmFjdG9yX0IsIGNvbmcsIC1mYWN0b3JfQSkgJT4lCiAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lIAogICAgICAgICAgICAgIHJlbmFtZV9hbGwobGlzdCh+IChwYXN0ZSguLCAiQSIsIHNlcCA9ICJfIikpKSkpICU+JQogIGxlZnRfam9pbihmYWN0b3JfbmFtZXNfYWR1bHRzICU+JSAKICAgICAgICAgICAgICByZW5hbWVfYWxsKGxpc3QofiAocGFzdGUoLiwgIkIiLCBzZXAgPSAiXyIpKSkpKQpgYGAKCmBgYHtyIHRvcCBtYXRjaCBhZHVsdHN9CmNvbmdfYWR1bHRzX3RvcF9tYXRjaF9BIDwtIHRvcF9tYXRjaF9mdW4oY29uZ19hZHVsdHMsICJjb3VudHJ5X0EiKQpjb25nX2FkdWx0c190b3BfbWF0Y2hfQiA8LSB0b3BfbWF0Y2hfZnVuKGNvbmdfYWR1bHRzLCAiY291bnRyeV9CIikKYGBgCgpgYGB7ciBjb25nIGFsbCBwYWlycyBhZHVsdHMsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjd9CmNvbmdfYWR1bHRzICU+JQogIG11dGF0ZV9hdCgjdmFycyhjb250YWlucygibGFiZGVzY3JpcHQiKSksCiAgICB2YXJzKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSwKICAgIGZ1bnMoZ3N1YigiIFxcKCIsICJcblxcKCIsIC4pKSkgJT4lCiAgbXV0YXRlX2F0KCN2YXJzKGNvbnRhaW5zKCJsYWJkZXNjcmlwdCIpKSwKICAgIHZhcnMoZmFjdG9yX2xhYmRlc2NyaXB0X0EpLAogICAgZnVucyhnc3ViKCJcXC8iLCAiXFwvXG4iLCAuKSkpICU+JQogICMgbGVmdF9qb2luKGNvbmdfYWR1bHRzX3RvcF9tYXRjaF9BICU+JSByZW5hbWUodG9wX21hdGNoX0EgPSB0b3BfbWF0Y2gpKSAlPiUKICBsZWZ0X2pvaW4oY29uZ19hZHVsdHNfdG9wX21hdGNoX0IgJT4lIHJlbmFtZSh0b3BfbWF0Y2hfQiA9IHRvcF9tYXRjaCkpICU+JQogIG11dGF0ZShpc190b3BfbWF0Y2ggPSBjYXNlX3doZW4oZmFjdG9yX0EgPT0gZmFjdG9yX0IgfiAiYm9sZC5pdGFsaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmYWN0b3JfQSA9PSB0b3BfbWF0Y2hfQSB+ICJib2xkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9CID09IHRvcF9tYXRjaF9CIH4gImJvbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJwbGFpbiIpKSAlPiUKICAjIG11dGF0ZShjb25nID0gaWZlbHNlKGNvbmcgPT0gMSwgTkFfcmVhbF8sIGNvbmcpKSAlPiUKICBtdXRhdGUoc2FtcGxlX0EgPSBwYXN0ZSh0b3VwcGVyKGNvdW50cnlfQSksICJhZHVsdHMiLCBzZXAgPSAiOlxuIikpICU+JQogIG11dGF0ZShzYW1wbGVfQiA9IHBhc3RlKHRvdXBwZXIoY291bnRyeV9CKSwgImFkdWx0cyIsIHNlcCA9ICI6XG4iKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoY291bnRyeV9BLCBjb3VudHJ5X0IpLAogICAgICAgICAgICBmdW5zKGZhY3Rvcih0b3VwcGVyKC4pLCBsZXZlbHMgPSB0b3VwcGVyKGxldmVsc19jb3VudHJ5KSkpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBmYWN0b3JfbGFiZGVzY3JpcHRfQSwKICAgICAgICAgICAgIHkgPSByZW9yZGVyKGZhY3Rvcl9sYWJkZXNjcmlwdF9CLCBkZXNjKGZhY3Rvcl9sYWJkZXNjcmlwdF9CKSksCiAgICAgICAgICAgICBmaWxsID0gY29uZykpICsKICBmYWNldF9ncmlkKHJlb3JkZXIoc2FtcGxlX0IsIGFzLm51bWVyaWMoY291bnRyeV9CKSkgfiAKICAgICAgICAgICAgICAgcmVvcmRlcihzYW1wbGVfQSwgYXMubnVtZXJpYyhjb3VudHJ5X0EpKSwgCiAgICAgICAgICAgICBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjYXNlX3doZW4oaXMubmEoY29uZykgfiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBmb3JtYXQocm91bmQoY29uZywgMiksIG5zbWFsbCA9IDIpKSwKICAgICAgICAgICAgICAgIGZvbnRmYWNlID0gaXNfdG9wX21hdGNoLAogICAgICAgICAgICAgICAgY29sb3IgPSBpc190b3BfbWF0Y2gpLAogICAgICAgICAgICBzaXplID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImRhcmtyZWQiLCAiZGFya2JsdWUiLCAiYmxhY2siKSkgKwogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKG9wdGlvbiA9ICJ2aXJpZGlzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJ3aWR0aCA9IDI1LCBiYXJoZWlnaHQgPSAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGZhY2UgPSAiYm9sZCIpKSArCiAgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwsIGZpbGwgPSBleHByZXNzaW9uKGl0YWxpYyhyW2NdKSkpCmBgYAoKIyMgQm9vdHN0cmFwcGVkIGNvbmdydWVuY2UKCmBgYHtyIGJvb3RzdHJhcCBjb25ncnVlbmNlIGFkdWx0c30KaWYgKGZpbGUuZXhpc3RzKCIuLi9yZXN1bHRzL2NvbmdfZGZfYWR1bHRzX2Ryb3AuUkRTIikpIHsKICAKICBjb25nX2RmX2FkdWx0cyA8LSByZWFkUkRTKCIuLi9yZXN1bHRzL2NvbmdfZGZfYWR1bHRzX2Ryb3AuUkRTIikKICAKfSBlbHNlIHsKICAKICBic19hZHVsdHMgPC0gbG9hZGluZ3NfYWR1bHRzICU+JQogICAgc2VsZWN0KGNhcGFjaXR5LCBmYWN0b3IsIGxvYWRpbmcpICU+JQogICAgc3ByZWFkKGZhY3RvciwgbG9hZGluZykgJT4lCiAgICBzZWxlY3QoLWNhcGFjaXR5KSAlPiUKICAgIHNqc3RhdHM6OmJvb3RzdHJhcCgxMDAwKSAKICAKICBmYWN0b3JzIDwtIGxldmVscyhmYWN0b3IobG9hZGluZ3NfYWR1bHRzJGZhY3RvcikpCiAgCiAgY29uZ19kZl9hZHVsdHMgPC0gZGF0YS5mcmFtZShOVUxMKQogIGZvciAoaSBpbiBmYWN0b3JzKSB7CiAgICBmb3IgKGogaW4gZmFjdG9ycykgewogICAgICBjbmFtZSA8LSBwYXN0ZShpLCBqLCBzZXAgPSAiLiIpCiAgICAgIHRlbXAgPC0gYnNfYWR1bHRzICU+JQogICAgICAgIG11dGF0ZShjb25nID0gbWFwX2RibChzdHJhcCwgfmxzYTo6Y29zaW5lKGFzLmRhdGEuZnJhbWUoLngpWyxpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5kYXRhLmZyYW1lKC54KVssal0pKSkKICAgICAgY29uZ19kZl9hZHVsdHNbMToxMDAwLCBjbmFtZV0gPC0gdGVtcCRjb25nCiAgICB9CiAgfQogIAogIGNvbmdfZGZfYWR1bHRzIDwtIGNvbmdfZGZfYWR1bHRzICU+JQogICAgZ2F0aGVyKGZhY3Rvcl9wYWlyLCBjb25nKSAlPiUKICAgIHNlcGFyYXRlKGZhY3Rvcl9wYWlyLCBpbnRvID0gYygiZmFjdG9yX0EiLCAiZmFjdG9yX0IiKSwgc2VwID0gIlxcLiIpICU+JQogICAgZ3JvdXBfYnkoZmFjdG9yX0EsIGZhY3Rvcl9CKSAlPiUKICAgIHN1bW1hcmlzZShtZWFuID0gbWVhbihjb25nKSwKICAgICAgICAgICAgICBjaV9sb3dlciA9IGNpX2xvd2VyKGNvbmcpLAogICAgICAgICAgICAgIGNpX3VwcGVyID0gY2lfdXBwZXIoY29uZykpICU+JQogICAgdW5ncm91cCgpICU+JQogICAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lCiAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkEiLCBzZXAgPSAiXyIpKSkpICU+JQogICAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lCiAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkIiLCBzZXAgPSAiXyIpKSkpCiAgCiAgcm0oaSwgaiwgY25hbWUsIHRlbXAsIGZhY3RvcnMpCiAgCiAgc2F2ZVJEUyhjb25nX2RmX2FkdWx0cywgZmlsZSA9ICIuLi9yZXN1bHRzL2NvbmdfZGZfYWR1bHRzX2Ryb3AuUkRTIikKfQpgYGAKCmBgYHtyIGNvbmcgbWluIGFkdWx0c30KIyBmaW5kIG1pbmltdW0gdmFsdWUgdG8gc2V0IGNvbnN0YW50IGxvd2VyIGJvdW5kIG9mIHBsb3RzCm1pbl9jb25nX2FkdWx0cyA8LSBjb25nX2RmX2FkdWx0cyAlPiUKICBzdW1tYXJpc2UobWluX2NvbmcgPSBtaW4oY2lfbG93ZXIsIG5hLnJtID0gVCkpCmBgYAoKYGBge3IgY29uZyBjaXMgdXMgYmFzZSBhZHVsdHMsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjl9CiMgRklHVVJFIDMKY29uZ19wbG90X2Z1bihjb25nX2RmID0gY29uZ19kZl9hZHVsdHMsIHdoaWNoX2NvdW50cnkgPSAiVVMiKSArCiAgeWxpbShtaW5fY29uZ19hZHVsdHMkbWluX2NvbmcsIDEpICsKICAjIHlsaW0oTkEsIDEpICsKICBsYWJzKHggPSBOVUxMKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnMDNfZHJvcC5wbmciKQpgYGAKCmBgYHtyIGNvbmcgY2lzIGdoIGJhc2UgYWR1bHRzLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC45fQojIEZJR1VSRSBTMgpjb25nX3Bsb3RfZnVuKGNvbmdfZGYgPSBjb25nX2RmX2FkdWx0cyAlPiUKICAgICAgICAgICAgICAgIG11dGF0ZV9hdCgjdmFycyhjb250YWlucygibGFiZGVzY3JpcHQiKSksCiAgICAgICAgICAgICAgICAgIHZhcnMoZmFjdG9yX2xhYmRlc2NyaXB0X0EpLAogICAgICAgICAgICAgICAgICBmdW5zKGdzdWIoIiBcXCgiLCAiXG5cXCgiLCAuKSkpICU+JQogICAgICAgICAgICAgICAgbXV0YXRlX2F0KCN2YXJzKGNvbnRhaW5zKCJsYWJkZXNjcmlwdCIpKSwKICAgICAgICAgICAgICAgICAgdmFycyhmYWN0b3JfbGFiZGVzY3JpcHRfQSksCiAgICAgICAgICAgICAgICAgIGZ1bnMoZ3N1YigiXFwvIiwgIlxcL1xuIiwgLikpKSwgCiAgICAgICAgICAgICAgd2hpY2hfY291bnRyeSA9ICJHaGFuYSIpICsKICB5bGltKG1pbl9jb25nX2FkdWx0cyRtaW5fY29uZywgMSkKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MwMl9kcm9wLnBuZyIpCmBgYAoKYGBge3IgY29uZyBjaXMgdGggYmFzZSBhZHVsdHMsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjl9CiMgRklHVVJFIFMzCmNvbmdfcGxvdF9mdW4oY29uZ19kZiA9IGNvbmdfZGZfYWR1bHRzLCAKICAgICAgICAgICAgICB3aGljaF9jb3VudHJ5ID0gIlRoYWlsYW5kIikgKwogIHlsaW0obWluX2NvbmdfYWR1bHRzJG1pbl9jb25nLCAxKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnUzAzX2Ryb3AucG5nIikKYGBgCgpgYGB7ciBjb25nIGNpcyBjaCBiYXNlIGFkdWx0cywgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOX0KIyBGSUdVUkUgUzQKY29uZ19wbG90X2Z1bihjb25nX2RmID0gY29uZ19kZl9hZHVsdHMsIAogICAgICAgICAgICAgIHdoaWNoX2NvdW50cnkgPSAiQ2hpbmEiKSArCiAgeWxpbShtaW5fY29uZ19hZHVsdHMkbWluX2NvbmcsIDEpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMDRfZHJvcC5wbmciKQpgYGAKCmBgYHtyIGNvbmcgY2lzIHZ0IGJhc2UgYWR1bHRzLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC45fQojIEZJR1VSRSBTNQpjb25nX3Bsb3RfZnVuKGNvbmdfZGYgPSBjb25nX2RmX2FkdWx0cyAlPiUKICAgICAgICAgICAgICAgIG11dGF0ZV9hdCgjdmFycyhjb250YWlucygibGFiZGVzY3JpcHQiKSksCiAgICAgICAgICAgICAgICAgIHZhcnMoZmFjdG9yX2xhYmRlc2NyaXB0X0EpLAogICAgICAgICAgICAgICAgICBmdW5zKGdzdWIoIiBcXCgiLCAiXG5cXCgiLCAuKSkpICU+JQogICAgICAgICAgICAgICAgbXV0YXRlX2F0KCN2YXJzKGNvbnRhaW5zKCJsYWJkZXNjcmlwdCIpKSwKICAgICAgICAgICAgICAgICAgdmFycyhmYWN0b3JfbGFiZGVzY3JpcHRfQSksCiAgICAgICAgICAgICAgICAgIGZ1bnMoZ3N1YigiXFwvIiwgIlxcL1xuIiwgLikpKSwgCiAgICAgICAgICAgICAgd2hpY2hfY291bnRyeSA9ICJWYW51YXR1IikgKwogIHlsaW0obWluX2NvbmdfYWR1bHRzJG1pbl9jb25nLCAxKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnUzA1X2Ryb3AucG5nIikKYGBgCgpgYGB7ciBib2R5IG1pbmQgY29uZyBhZHVsdHN9CiMgIkluIGVhY2ggc2FtcGxlLCB0aGVyZSB3YXMgYSBmYWN0b3IgdGhhdCB3YXMgc2ltaWxhciB0byBVUyBhZHVsdHPigJkg4oCcYm9keeKAnSBmYWN0b3IuLi4KY29uZ19kZl9hZHVsdHMgJT4lIAogIGZpbHRlcihncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0EpKSwgCiAgICAgICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQikpLAogICAgICAgICBjb3VudHJ5X0EgIT0gIlVTIiwgY291bnRyeV9CID09ICJVUyIpCgojICIuLi5hbmQgbm90IHNpbWlsYXIgdG8gdGhlIFVTIGFkdWx0IOKAnG1pbmTigJ0gZmFjdG9yLCAuLi4KY29uZ19kZl9hZHVsdHMgJT4lIAogIGZpbHRlcihncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0EpKSwgCiAgICAgICAgIGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQikpLAogICAgICAgICBjb3VudHJ5X0EgIT0gIlVTIiwgY291bnRyeV9CID09ICJVUyIpCgojICIuLi4gYW5kIGEgZmFjdG9yIHRoYXQgd2FzIG11Y2ggbW9yZSBzaW1pbGFyIHRvIFVTIGFkdWx0c+KAmSDigJxtaW5k4oCdIGZhY3Rvci4uLgpjb25nX2RmX2FkdWx0cyAlPiUgCiAgZmlsdGVyKGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpLCAKICAgICAgICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSksCiAgICAgICAgIGNvdW50cnlfQSAhPSAiVVMiLCBjb3VudHJ5X0IgPT0gIlVTIikKCiMgIi4uLnRoYW4gdGhlIFVTIGFkdWx0IOKAnGJvZHnigJ0gZmFjdG9yLiIKY29uZ19kZl9hZHVsdHMgJT4lIAogIGZpbHRlcihncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0EpKSwgCiAgICAgICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQikpLAogICAgICAgICBjb3VudHJ5X0EgIT0gIlVTIiwgY291bnRyeV9CID09ICJVUyIpCmBgYApgYGB7ciBoZWFydCBjb25nIGFkdWx0c30KY29uZ19kZl9hZHVsdHMgJT4lIAogIGZpbHRlcihncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSksIAogICAgICAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSksCiAgICAgICAgIGNvdW50cnlfQSAlaW4lIGMoIlRoYWlsYW5kIiwgIkNoaW5hIiksIGNvdW50cnlfQiA9PSAiVVMiKQoKY29uZ19kZl9hZHVsdHMgJT4lIAogIGZpbHRlcihncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0EpKSB8IAogICAgICAgICAgIGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpLAogICAgICAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSksCiAgICAgICAgIGNvdW50cnlfQSAlaW4lIGMoIlRoYWlsYW5kIiwgIkNoaW5hIiksIGNvdW50cnlfQiA9PSAiVVMiKQpgYGAKCgojIENoaWxkcmVuCgojIyBTYW1wbGVzCgpgYGB7ciBzYW1wbGVzIGNoaWxkcmVufQpiaW5kX3Jvd3MoZF91c19jaGlsZHJlbiwgZF9naF9jaGlsZHJlbiwgZF90aF9jaGlsZHJlbiwgZF9jaF9jaGlsZHJlbiwgZF92dF9jaGlsZHJlbikgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBkaXN0aW5jdChjb3VudHJ5LCBzdWJqX2lkKSAlPiUKICBjb3VudChjb3VudHJ5KSAlPiUgCiAgamFuaXRvcjo6YWRvcm5fdG90YWxzKCkKYGBgCgojIyBTY2FsZSB1c2UKCmBgYHtyIHNjYWxlIHVzZSBtZWFuIG92ZXJhbGwgY2hpbGRyZW59CmJpbmRfcm93cyhkX3VzX2NoaWxkcmVuLCBkX2doX2NoaWxkcmVuLCBkX3RoX2NoaWxkcmVuLCBkX2NoX2NoaWxkcmVuLCBkX3Z0X2NoaWxkcmVuKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgIHJlc3BvbnNlX2NhdCA9IHJlY29kZV9mYWN0b3IocmVzcG9uc2VfY2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyIgPSAibm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJraW5kIG9mIiA9ICJraW5kIG9mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieWVzIiA9ICJ5ZXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWlzc2luZyA9ICJtaXNzaW5nIGRhdGEiKSkgJT4lCiAgY291bnQoY291bnRyeSwgcmVzcG9uc2VfY2F0KSAlPiUKICBjb21wbGV0ZShyZXNwb25zZV9jYXQsIG5lc3RpbmcoY291bnRyeSksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1uKSAlPiUKICBzcHJlYWQocmVzcG9uc2VfY2F0LCBwcm9wKSAlPiUKICBqYW5pdG9yOjphZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAyKQpgYGAKCiMjIEZhY3RvciByZXRlbnRpb246IHBhcmFsbGVsIGFuYWx5c2lzCgpgYGB7ciBwYXJhbGxlbCBkaXN0IGNoaWxkcmVuLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC41fQojIEhlcmUncyB0aGUgZGlzdHJpYnV0aW9uIG92ZXIgb3V0Y29tZXMgb2YgcGFyYWxsZWwgYW5hbHlzaXMgd2l0aCAxMDAgaXRlcmF0aW9ucy4gV2UnbGwgY2hvb3NlIHRoZSBtZWRpYW4gbnVtYmVyIG9mIGZhY3RvcnMuCgppZiAoZmlsZS5leGlzdHMoIi4uL3Jlc3VsdHMvcGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbl9kcm9wLlJEUyIpKSB7CiAgCiAgcGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbiA8LSByZWFkUkRTKCIuLi9yZXN1bHRzL3BhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW5fZHJvcC5SRFMiKQogIAp9IGVsc2UgewogIAogIHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW4gPC0gZGF0YS5mcmFtZSh1cyA9IE5VTEwsIGdoID0gTlVMTCwgdGggPSBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IE5VTEwsIHZ0ID0gTlVMTCkKICAKICBzZXQuc2VlZCg1NDMyMSkKICBuX2NvcmVzIDwtIHBhcmFsbGVsOjpkZXRlY3RDb3JlcygpCiAgb3B0aW9ucyhtYy5jb3JlcyA9IG5fY29yZXMpCiAgCiAgZm9yIChpIGluIDE6MTAwKSB7CiAgICBwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuW2ksICJ1cyJdIDwtIGZhLnBhcmFsbGVsKGRfdXNfY2hpbGRyZW5fdywgcGxvdCA9IEYpJG5mYWN0CiAgICBwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuW2ksICJnaCJdIDwtIGZhLnBhcmFsbGVsKGRfZ2hfY2hpbGRyZW5fdywgcGxvdCA9IEYpJG5mYWN0ICAgICAKICAgIHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW5baSwgInRoIl0gPC0gZmEucGFyYWxsZWwoZF90aF9jaGlsZHJlbl93LCBwbG90ID0gRikkbmZhY3QKICAgIHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW5baSwgImNoIl0gPC0gZmEucGFyYWxsZWwoZF9jaF9jaGlsZHJlbl93LCBwbG90ID0gRikkbmZhY3QKICAgIHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW5baSwgInZ0Il0gPC0gZmEucGFyYWxsZWwoZF92dF9jaGlsZHJlbl93LCBwbG90ID0gRikkbmZhY3QKICB9CiAgCiAgc2F2ZVJEUyhwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuLCBmaWxlID0gIi4uL3Jlc3VsdHMvcGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbl9kcm9wLlJEUyIpCn0KCiMgcGxvdApwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiaXRlciIpICU+JQogIGdhdGhlcihjb3VudHJ5LCBuZmFjdCwgLWl0ZXIpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdncGxvdChhZXMoeCA9IG5mYWN0KSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5KSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygxLCBtYXgocGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbikgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKDAsIDEwMCwgMSkpICsKICBsYWJzKHggPSAiTnVtYmVyIG9mIGZhY3RvcnMgc3VnZ2VzdGVkIGJ5IGZhLnBhcmFsbGVsKCkiKQpgYGAKCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKYGBge3IgZWZhIGNoaWxkcmVufQpzZXQuc2VlZCg1NDMyMSkKCiMgZG8gZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzOiBjaGlsZHJlbgplZmFfdXNfY2hpbGRyZW4gPC0gZmFfZnVuKGRfdXNfY2hpbGRyZW5fdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuJHVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fbi5pdGVyID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fcm90ID0gIm9ibGltaW4iKQpjb2xuYW1lcyhlZmFfdXNfY2hpbGRyZW4kbG9hZGluZ3MpIDwtIHBhc3RlMCgidXNDSElMRFJFTl8iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3VzX2NoaWxkcmVuJGxvYWRpbmdzKSkKCmVmYV9naF9jaGlsZHJlbiA8LSBmYV9mdW4oZF9naF9jaGlsZHJlbl93LAogICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBtZWRpYW4ocGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbiRnaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX24uaXRlciA9IDEwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX3JvdCA9ICJvYmxpbWluIikKY29sbmFtZXMoZWZhX2doX2NoaWxkcmVuJGxvYWRpbmdzKSA8LSBwYXN0ZTAoImdoQ0hJTERSRU5fIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9naF9jaGlsZHJlbiRsb2FkaW5ncykpCgplZmFfdGhfY2hpbGRyZW4gPC0gZmFfZnVuKGRfdGhfY2hpbGRyZW5fdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuJHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fbi5pdGVyID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fcm90ID0gIm9ibGltaW4iKQpjb2xuYW1lcyhlZmFfdGhfY2hpbGRyZW4kbG9hZGluZ3MpIDwtIHBhc3RlMCgidGhDSElMRFJFTl8iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3RoX2NoaWxkcmVuJGxvYWRpbmdzKSkKCmVmYV9jaF9jaGlsZHJlbiA8LSBmYV9mdW4oZF9jaF9jaGlsZHJlbl93LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbWVkaWFuKHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW4kY2gpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9uLml0ZXIgPSAxMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbl9yb3QgPSAib2JsaW1pbiIpCmNvbG5hbWVzKGVmYV9jaF9jaGlsZHJlbiRsb2FkaW5ncykgPC0gcGFzdGUwKCJjaENISUxEUkVOXyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfY2hfY2hpbGRyZW4kbG9hZGluZ3MpKQoKZWZhX3Z0X2NoaWxkcmVuIDwtIGZhX2Z1bihkX3Z0X2NoaWxkcmVuX3csIAogICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBtZWRpYW4ocGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbiR2dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX24uaXRlciA9IDEwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuX3JvdCA9ICJvYmxpbWluIikKY29sbmFtZXMoZWZhX3Z0X2NoaWxkcmVuJGxvYWRpbmdzKSA8LSBwYXN0ZTAoInZ0Q0hJTERSRU5fIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV92dF9jaGlsZHJlbiRsb2FkaW5ncykpCmBgYAoKYGBge3IgZmFjdG9yIG5hbWVzIGNoaWxkcmVufQpmYWN0b3JfbmFtZXNfY2hpbGRyZW4gPC0gZGF0YS5mcmFtZShmYWN0b3IgPSBjKGNvbG5hbWVzKGVmYV91c19jaGlsZHJlbiRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX2doX2NoaWxkcmVuJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfdGhfY2hpbGRyZW4kbG9hZGluZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9jaF9jaGlsZHJlbiRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3Z0X2NoaWxkcmVuJGxvYWRpbmdzKSkpICU+JQogIG11dGF0ZShhZ2VfZ3JvdXAgPSAiY2hpbGRyZW4iKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGNhc2Vfd2hlbihncmVwbCgiXnVzIiwgZmFjdG9yKSB+ICJVUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl5naCIsIGZhY3RvcikgfiAiR2hhbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJedGgiLCBmYWN0b3IpIH4gIlRoYWlsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiXmNoIiwgZmFjdG9yKSB+ICJDaGluYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl52dCIsIGZhY3RvcikgfiAiVmFudWF0dSIpLAogICAgICAgICBjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGxldmVsc19jb3VudHJ5KSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9uYW1lID0gZ3N1YigiXnVzIiwgIlVTICIsIGZhY3RvciksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXmdoIiwgIkdoLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXnRoIiwgIlRoLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXmNoIiwgIkNoLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXnZ0IiwgIlZhLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiQ0hJTERSRU4iLCAiY2hpbGRyZW4iLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiX0YiLCAiIEZhY3RvciAiLCBmYWN0b3JfbmFtZSkpICU+JQogIG11dGF0ZShmYWN0b3JfZGVzY3JpcHQgPSByZWNvZGUoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNDSElMRFJFTl9GMSA9ICJCb2R5LWxpa2UsIG5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzQ0hJTERSRU5fRjMgPSAiSGVhcnQtbGlrZSwgcG9zaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNDSElMRFJFTl9GMiA9ICJNaW5kLWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2hDSElMRFJFTl9GMSA9ICJCb2R5LWxpa2UsIG5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdoQ0hJTERSRU5fRjIgPSAiTWluZC1saWtlLCBwb3NpdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaENISUxEUkVOX0YzID0gIlByYXksIGFkZCwgZXRjLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aENISUxEUkVOX0YxID0gIkJvZHktbGlrZSwgcG9zaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhDSElMRFJFTl9GMiA9ICJIZWFydC1saWtlLCBuZWdhdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aENISUxEUkVOX0YzID0gIk1pbmQtbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aENISUxEUkVOX0Y0ID0gIkFkZCwgcHJheSwgZXRjLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaENISUxEUkVOX0YxID0gIkhlYXJ0LWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hDSElMRFJFTl9GMiA9ICJCb2R5LWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hDSElMRFJFTl9GMyA9ICJNaW5kLWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hDSElMRFJFTl9GNCA9ICJQcmF5LCBldGMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0Q0hJTERSRU5fRjEgPSAiQm9keS1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0Q0hJTERSRU5fRjIgPSAiTWluZC1saWtlLCBwb3NpdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dENISUxEUkVOX0YzID0gIkhlYXJ0LWxpa2UsIG5lZ2F0aXZlIiksCiAgICAgICAgIGZhY3Rvcl9sYWJkZXNjcmlwdCA9IHBhc3RlKGdzdWIoIi4qX0YiLCAiRiIsIGZhY3RvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9kZXNjcmlwdCwgc2VwID0gIjogIikpCmBgYAoKIyMgRmFjdG9yIGxvYWRpbmdzCgpgYGB7ciBvcmRlciBjaGlsZHJlbn0KIyBvcmRlciBjYXBhY2l0aWVzOiBjaGlsZHJlbgpvcmRlcl91c19jaGlsZHJlbiA8LSBmYS5zb3J0KGVmYV91c19jaGlsZHJlbikkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpvcmRlcl9naF9jaGlsZHJlbiA8LSBmYS5zb3J0KGVmYV9naF9jaGlsZHJlbikkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpvcmRlcl90aF9jaGlsZHJlbiA8LSBmYS5zb3J0KGVmYV90aF9jaGlsZHJlbikkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpvcmRlcl9jaF9jaGlsZHJlbiA8LSBmYS5zb3J0KGVmYV9jaF9jaGlsZHJlbikkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpvcmRlcl92dF9jaGlsZHJlbiA8LSBmYS5zb3J0KGVmYV92dF9jaGlsZHJlbikkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpgYGAKCmBgYHtyIGxvYWRpbmdzIGNoaWxkcmVufQojIGNvbXBpbGUgbG9hZGluZ3M6IGNoaWxkcmVuCmxvYWRpbmdzX2NoaWxkcmVuIDwtIGJpbmRfcm93cygKICBsb2FkaW5nc19mdW4oZWZhX3VzX2NoaWxkcmVuKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiVVMiKSwKICBsb2FkaW5nc19mdW4oZWZhX2doX2NoaWxkcmVuKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiR2hhbmEiKSwKICBsb2FkaW5nc19mdW4oZWZhX3RoX2NoaWxkcmVuKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiVGhhaWxhbmQiKSwKICBsb2FkaW5nc19mdW4oZWZhX2NoX2NoaWxkcmVuKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiQ2hpbmEiKSwKICBsb2FkaW5nc19mdW4oZWZhX3Z0X2NoaWxkcmVuKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiVmFudWF0dSIpKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgIGNhcGFjaXR5X29yZF91cyA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfdXNfY2hpbGRyZW4pLAogICAgICAgICBjYXBhY2l0eV9vcmRfZ2ggPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX2doX2NoaWxkcmVuKSwKICAgICAgICAgY2FwYWNpdHlfb3JkX3RoID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBvcmRlcl90aF9jaGlsZHJlbiksCiAgICAgICAgIGNhcGFjaXR5X29yZF9jaCA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfY2hfY2hpbGRyZW4pLAogICAgICAgICBjYXBhY2l0eV9vcmRfdnQgPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX3Z0X2NoaWxkcmVuKSkgJT4lCiAgYXJyYW5nZShjb3VudHJ5LCBmYWN0b3IsIGRlc2MoYWJzKGxvYWRpbmcpKSwgY2FwYWNpdHkpICU+JQogIG11dGF0ZShvcmRlciA9IDE6bnJvdyguKSkgJT4lCiAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19jaGlsZHJlbikKYGBgCgpgYGB7ciBoZWF0bWFwIGNoaWxkcmVuLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC43fQojIG1ha2UgaGVhdG1hcCBmaWd1cmU6IGNoaWxkcmVuCmxvYWRpbmdzX2NoaWxkcmVuICU+JQogIG11dGF0ZShmYWN0b3JfbnVtID0gYXMubnVtZXJpYyhnc3ViKCIuKkYiLCAiIiwgZmFjdG9yKSkpICU+JQogIG11dGF0ZShzYW1wbGUgPSBwYXN0ZShjb3VudHJ5LCAiY2hpbGRyZW4iLCBzZXAgPSAiXG4iKSkgJT4lCiAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19jaGlsZHJlbikgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKGZhY3Rvcl9sYWJkZXNjcmlwdCwgZmFjdG9yX251bSksIAogICAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX3VzKSksCiAgICAgICAgICAgICAjIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKGNhcGFjaXR5X29yZF9lYykpLCAKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX2doKSksCiAgICAgICAgICAgICAjIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKGNhcGFjaXR5X29yZF90aCkpLAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfY2gpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX3Z0KSksCiAgICAgICAgICAgICBmaWxsID0gbG9hZGluZykpICsKICBmYWNldF9ncmlkKH4gcmVvcmRlcihzYW1wbGUsIGFzLm51bWVyaWMoY291bnRyeSkpLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpKSwgc2l6ZSA9IDMpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMjAsIGJhcndpZHRoID0gMC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIHBhbmVsLnNwYWNpbmcueCA9IHVuaXQoMC44LCAibGluZXMiKSwKICAgICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBmYWNlID0gImJvbGQiKSkgKwogIGxhYnMoeCA9IE5VTEwsIHkgPSAiQ2FwYWNpdHkiLCBmaWxsID0gIkZhY3RvclxubG9hZGluZyIpCmBgYAoKIyMgQ29uZ3J1ZW5jZQoKU2VlIFtBbGwgc2FtcGxlc10sIGJlbG93LgoKIyMgQm9vdHN0cmFwcGVkIGNvbmdydWVuY2UKCmBgYHtyIGJvb3RzdHJhcCBjb25ncnVlbmNlIGNoaWxkcmVufQppZiAoZmlsZS5leGlzdHMoIi4uL3Jlc3VsdHMvY29uZ19kZl9jaGlsZHJlbl9kcm9wLlJEUyIpKSB7CiAgCiAgY29uZ19kZl9jaGlsZHJlbiA8LSByZWFkUkRTKCIuLi9yZXN1bHRzL2NvbmdfZGZfY2hpbGRyZW5fZHJvcC5SRFMiKQogIAp9IGVsc2UgewogIAogIGJzX2NoaWxkcmVuIDwtIGxvYWRpbmdzX2NoaWxkcmVuICU+JQogICAgc2VsZWN0KGNhcGFjaXR5LCBmYWN0b3IsIGxvYWRpbmcpICU+JQogICAgc3ByZWFkKGZhY3RvciwgbG9hZGluZykgJT4lCiAgICBmdWxsX2pvaW4obG9hZGluZ3NfYWR1bHRzICU+JQogICAgICAgICAgICAgICAgc2VsZWN0KGNhcGFjaXR5LCBmYWN0b3IsIGxvYWRpbmcpICU+JQogICAgICAgICAgICAgICAgc3ByZWFkKGZhY3RvciwgbG9hZGluZykpICU+JQogICAgc2VsZWN0KC1jYXBhY2l0eSkgJT4lCiAgICBzanN0YXRzOjpib290c3RyYXAoMTAwMCkgCiAgCiAgY29uZ19kZl9jaGlsZHJlbiA8LSBkYXRhLmZyYW1lKE5VTEwpCiAgCiAgZm9yIChrIGluIGxldmVsc19jb3VudHJ5KSB7CiAgICAKICAgIGZhY3RvcnNfY2hpbGRyZW4gPC0gbGV2ZWxzKGZhY3Rvcihsb2FkaW5nc19jaGlsZHJlbiRmYWN0b3JbCiAgICAgIGxvYWRpbmdzX2NoaWxkcmVuJGNvdW50cnkgPT0ga10pKQogICAgZmFjdG9yc19hZHVsdHMgPC0gbGV2ZWxzKGZhY3Rvcihsb2FkaW5nc19hZHVsdHMkZmFjdG9yWwogICAgICBsb2FkaW5nc19hZHVsdHMkY291bnRyeSA9PSBrXSkpCiAgICAKICAgIGZvciAoaSBpbiBmYWN0b3JzX2NoaWxkcmVuKSB7CiAgICAgIGZvciAoaiBpbiBmYWN0b3JzX2FkdWx0cykgewogICAgICAgIGNuYW1lIDwtIHBhc3RlKGksIGosIHNlcCA9ICIuIikKICAgICAgICB0ZW1wIDwtIGJzX2NoaWxkcmVuICU+JQogICAgICAgICAgbXV0YXRlKGNvbmcgPSBtYXBfZGJsKHN0cmFwLCB+bHNhOjpjb3NpbmUoYXMuZGF0YS5mcmFtZSgueClbLGldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuZGF0YS5mcmFtZSgueClbLGpdKSkpCiAgICAgICAgY29uZ19kZl9jaGlsZHJlblsxOjEwMDAsIGNuYW1lXSA8LSB0ZW1wJGNvbmcKICAgICAgfQogICAgfQogICAgCiAgICBybShpLCBqLCBjbmFtZSwgdGVtcCwgZmFjdG9yc19jaGlsZHJlbiwgZmFjdG9yc19hZHVsdHMpCiAgICAKICB9CiAgCiAgcm0oaykKICAKICBjb25nX2RmX2NoaWxkcmVuIDwtIGNvbmdfZGZfY2hpbGRyZW4gJT4lCiAgICBnYXRoZXIoZmFjdG9yX3BhaXIsIGNvbmcpICU+JQogICAgc2VwYXJhdGUoZmFjdG9yX3BhaXIsIGludG8gPSBjKCJmYWN0b3JfQSIsICJmYWN0b3JfQiIpLCBzZXAgPSAiXFwuIikgJT4lCiAgICBncm91cF9ieShmYWN0b3JfQSwgZmFjdG9yX0IpICU+JQogICAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKGNvbmcpLAogICAgICAgICAgICAgIGNpX2xvd2VyID0gY2lfbG93ZXIoY29uZyksCiAgICAgICAgICAgICAgY2lfdXBwZXIgPSBjaV91cHBlcihjb25nKSkgJT4lCiAgICB1bmdyb3VwKCkgJT4lCiAgICBmdWxsX2pvaW4oZmFjdG9yX25hbWVzX2NoaWxkcmVuICU+JQogICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJBIiwgc2VwID0gIl8iKSkpKSAlPiUKICAgIGZ1bGxfam9pbihmYWN0b3JfbmFtZXNfYWR1bHRzICU+JQogICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJCIiwgc2VwID0gIl8iKSkpKSAlPiUKICAgIG11dGF0ZShmYWN0b3JfYmhtX0EgPSBjYXNlX3doZW4oCiAgICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpIH4gIkJvZHktbGlrZVxuY2hpbGQgZmFjdG9yIiwKICAgICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSkgfiAiTWluZC1saWtlXG5jaGlsZCBmYWN0b3IiLAogICAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSkgfiAiSGVhcnQtbGlrZVxuY2hpbGQgZmFjdG9yIiwKICAgICAgVFJVRSB+ICJPdGhlciIpKSAlPiUKICAgIG11dGF0ZShmYWN0b3JfYmhtX0IgPSBjYXNlX3doZW4oCiAgICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQikpIH4gIkxvY2FsIGFkdWx0czpcbkJvZHktbGlrZSBmYWN0b3IiLAogICAgICBncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSB+ICJMb2NhbCBhZHVsdHM6XG5NaW5kLWxpa2UgZmFjdG9yIiwKICAgICAgZ3JlcGwoImhlYXJ0IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQikpIH4gIkxvY2FsIGFkdWx0czpcbkhlYXJ0LWxpa2UgZmFjdG9yIiwKICAgICAgVFJVRSB+ICJMb2NhbCBhZHVsdHM6XG5PdGhlciBmYWN0b3IiKSkKICAKICBzYXZlUkRTKGNvbmdfZGZfY2hpbGRyZW4sIGZpbGUgPSAiLi4vcmVzdWx0cy9jb25nX2RmX2NoaWxkcmVuX2Ryb3AuUkRTIikKfQpgYGAKCmBgYHtyIGNvbmcgbWluIGNoaWxkcmVufQojIGZpbmQgbWluaW11bSB2YWx1ZSB0byBzZXQgY29uc3RhbnQgbG93ZXIgYm91bmQgb2YgcGxvdHMKbWluX2NvbmdfY2hpbGRyZW4gPC0gY29uZ19kZl9jaGlsZHJlbiAlPiUKICBzdW1tYXJpc2UobWluX2NvbmcgPSBtaW4oY2lfbG93ZXIsIG5hLnJtID0gVCkpCmBgYAoKYGBge3IgY29uZyBjaXMgY2hpbGRyZW4sIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLjR9CiMgRklHVVJFIDQKIyBmaWcuYXNwIGNob3NlbiB0byBrZWVwIGFic29sdXRlIGhlaWdodCBvZiB5LWF4aXMgcmVsYXRpdmVseSBzaW1pbGFyIGFjcm9zcyBhZHVsdHMgYW5kIGNoaWxkcmVuCmNvbmdfZGZfY2hpbGRyZW4gJT4lCiAgbXV0YXRlKHJlZ2lvbl9BID0gY2FzZV93aGVuKAogICAgY291bnRyeV9BID09ICJVUyIgfiAiU0YgQmF5IEFyZWEiLAogICAgY291bnRyeV9BID09ICJHaGFuYSIgfiAiQ2FwZSBDb2FzdCIsCiAgICBjb3VudHJ5X0EgPT0gIlRoYWlsYW5kIiB+ICJDaGlhbmcgTWFpIiwKICAgIGNvdW50cnlfQSA9PSAiQ2hpbmEiIH4gIlNoYW5naGFpIiwKICAgIGNvdW50cnlfQSA9PSAiVmFudWF0dSIgfiAiUFYgJiBNYWxla3VsYSIpKSAlPiUKICBtdXRhdGUoc2FtcGxlX0EgPSBwYXN0ZShjb3VudHJ5X0EsIGFnZV9ncm91cF9BLCBzZXAgPSAiXG4iKSkgJT4lCiAgbXV0YXRlKGxhYl9BID0gcGFzdGUocGFzdGUwKHJlZ2lvbl9BLCAiLCIpLCAKICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAodG91cHBlcihjb3VudHJ5X0EpLCAiOiIpLCAKICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXBfQSwgc2VwID0gIlxuIikpICU+JQogIG11dGF0ZShiaG1fQSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfbGFiZGVzY3JpcHRfQSkpIH4gImJvZHkiLAogICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSkgfiAibWluZCIsCiAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSkgfiAiaGVhcnQiLCAKICAgIFRSVUUgfiAib3RoZXIiKSkgJT4lCiAgbXV0YXRlKGJobV9BID0gZmFjdG9yKGJobV9BLCBsZXZlbHMgPSBjKCJib2R5IiwgImhlYXJ0IiwgIm1pbmQiLCAib3RoZXIiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoZmFjdG9yX2xhYmRlc2NyaXB0X0EsIGFzLm51bWVyaWMoYmhtX0EpKSwgeSA9IG1lYW4pKSArCiAgZmFjZXRfZ3JpZChmYWN0b3JfYmhtX0IgfiByZW9yZGVyKGxhYl9BLCBhcy5udW1lcmljKGNvdW50cnlfQSkpLCAKICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlX3giLCBzcGFjZSA9ICJmcmVlX3giKSArCiAgIyBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAtSW5mLCB4bWF4ID0gSW5mLCB5bWluID0gLUluZiwgeW1heCA9IDAuODUsCiAgIyAgICAgICAgICBmaWxsID0gImdyYXkyMCIsIGFscGhhID0gMC4yKSArCiAgIyBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAtSW5mLCB4bWF4ID0gSW5mLCB5bWluID0gMC44NSwgeW1heCA9IDAuOTUsCiAgIyAgICAgICAgICBmaWxsID0gdmlyaWRpc0xpdGU6OnZpcmlkaXMoMiwgYmVnaW4gPSAwLjc1LzIsIGVuZCA9IDAuNzUpWzFdLCBhbHBoYSA9IDAuMikgKwogICMgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gLUluZiwgeG1heCA9IEluZiwgeW1pbiA9IDAuOTUsIHltYXggPSBJbmYsCiAgIyAgICAgICAgICBmaWxsID0gdmlyaWRpc0xpdGU6OnZpcmlkaXMoMiwgYmVnaW4gPSAwLjc1LzIsIGVuZCA9IDAuNzUpWzJdLCBhbHBoYSA9IDAuMikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuODUsIGx0eSA9IDIsIGNvbG9yID0gImdyYXkxMCIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjk1LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5MTAiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDMsCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobWVhbiwgMiksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAgeSA9IGlmZWxzZShjaV9sb3dlciA8IDAuMiwgY2lfdXBwZXIgKyAwLjA1LCBjaV9sb3dlciAtIDAuMDUpLAogICAgICAgICAgICAgICAgdmp1c3QgPSBpZmVsc2UoY2lfbG93ZXIgPCAwLjIsIDAsIDEpKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEsIDEsIDAuMiksCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGV4cGFuc2lvbihhZGQgPSAwLjA1KSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIiwgImZpbGwiKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSAyMToyNSkgKwogIGxhYnMoeCA9IE5VTEwsCiAgICAgICB5ID0gZXhwcmVzc2lvbigiU2ltaWxhcml0eSAiKGl0YWxpYyhyW2NdKSkpKSArIAogIGd1aWRlcyhjb2xvciA9ICJub25lIiwgZmlsbCA9ICJub25lIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIsCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBzY2FsZXM6OmFscGhhKCJ3aGl0ZSIsIDApLCBjb2xvciA9ICJibGFjayIpLAogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBmYWNlID0gImJvbGQiKSwgCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoNS41LCA1LjUsIDUuNSwgMTUuNSksICJwb2ludCIpKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnMDRfZHJvcC5wbmciKQpgYGAKCmBgYHtyIGJvZHkgbWluZCBjb25nIGNoaWxkcmVufQojICJJbiBlYWNoIHNhbXBsZSwgdGhlcmUgd2FzIGEgZmFjdG9yIHRoYXQgd2FzIG11Y2ggbW9yZSBzaW1pbGFyIHRvIGxvY2FsIGFkdWx0c+KAmSDigJxib2R5LWxpa2XigJ0gZmFjdG9yLi4uCmNvbmdfZGZfY2hpbGRyZW4gJT4lIAogIGZpbHRlcihncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2JobV9BKSksIAogICAgICAgICBncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2JobV9CKSkpCgojICIuLi50aGFuIHRoZWlyIOKAnG1pbmQtbGlrZeKAnSBmYWN0b3IsIC4uLgpjb25nX2RmX2NoaWxkcmVuICU+JSAKICBmaWx0ZXIoZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQSkpLCAKICAgICAgICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQikpKQoKIyAiLi4uIGFuZCBhIGZhY3RvciB0aGF0IHdhcyBtdWNoIG1vcmUgc2ltaWxhciB0byBsb2NhbCBhZHVsdHPigJkg4oCcbWluZC1saWtl4oCdIGZhY3Rvci4uLgpjb25nX2RmX2NoaWxkcmVuICU+JSAKICBmaWx0ZXIoZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQSkpLCAKICAgICAgICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQikpKQoKIyAiLi4udGhhbiB0aGVpciDigJxib2R5LWxpa2XigJ0gZmFjdG9yLiIKY29uZ19kZl9jaGlsZHJlbiAlPiUgCiAgZmlsdGVyKGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfYmhtX0EpKSwgCiAgICAgICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfYmhtX0IpKSkKYGBgCgoKIyBBbGwgc2FtcGxlcwoKIyMgQ29uZ3J1ZW5jZQoKYGBge3IgY29uZ3J1ZW5jZSBhbGwgc2FtcGxlc30KY29uZ19hbGwgPC0gZmEuY29uZ3J1ZW5jZSh4ID0gbGlzdChlZmFfdXNfYWR1bHRzJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9naF9hZHVsdHMkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX3RoX2FkdWx0cyRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2hfYWR1bHRzJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV92dF9hZHVsdHMkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX3VzX2NoaWxkcmVuJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9naF9jaGlsZHJlbiRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfdGhfY2hpbGRyZW4kbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX2NoX2NoaWxkcmVuJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV92dF9jaGlsZHJlbiRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gNSkgJT4lCiAgIyBnZXRfdXBwZXJfdHJpX2Z1bigpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImZhY3Rvcl9BIikgJT4lCiAgZ2F0aGVyKGZhY3Rvcl9CLCBjb25nLCAtZmFjdG9yX0EpICU+JQogIGxlZnRfam9pbihiaW5kX3Jvd3MoZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9hbGwoZnVucyhwYXN0ZSguLCAiQSIsIHNlcCA9ICJfIikpKSwKICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lc19jaGlsZHJlbiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJBIiwgc2VwID0gIl8iKSkpKSkgJT4lCiAgbGVmdF9qb2luKGJpbmRfcm93cyhmYWN0b3JfbmFtZXNfYWR1bHRzICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJCIiwgc2VwID0gIl8iKSkpLAogICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2NoaWxkcmVuICU+JQogICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkIiLCBzZXAgPSAiXyIpKSkpKQpgYGAKCmBgYHtyIGNvbmcgYWxsIHBhaXJzIGZvcm1hdH0KIyBtYWtlIHdpZGUtZm9ybSB2ZXJzaW9uIG9mIGRmCmNvbmdfYWxsX3cgPC0gY29uZ19hbGwgJT4lCiAgc2VsZWN0KGZhY3Rvcl9BLCBmYWN0b3JfQiwgY29uZykgJT4lCiAgc3ByZWFkKGZhY3Rvcl9CLCBjb25nKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoImZhY3Rvcl9BIikKCiMgdHJlYXQgc2ltaWxhcml0eSBtYXRyaXggYXMgaWYgaXQgd2VyZSB0aGUgY29ycmVsYXRpb24gbWF0cml4IGZvciBoY2x1c3QKcm93Lm9yZGVyIDwtIGhjbHVzdChhcy5kaXN0KCgxIC0gY29uZ19hbGxfdykvMikpJG9yZGVyCmNvbC5vcmRlciA8LSBoY2x1c3QoYXMuZGlzdCh0KCgxIC0gY29uZ19hbGxfdykvMikpKSRvcmRlcgoKIyByZS1vcmRlciBtYXRyaXggYWNjb3JpbmcgdG8gY2x1c3RlcmluZwpjb25nX2FsbF93IDwtIGNvbmdfYWxsX3dbcm93Lm9yZGVyLCBjb2wub3JkZXJdIAoKIyBmb3Igc29tZSByZWFzb24gcmVzaGFwZTI6Om1lbHQoKSB3b3JrcyBiZXR0ZXIgdGhhbiBjdXJyZW50IHRpZHl2ZXJzZSBmdW5jdGlvbnMuLi4KY29uZ19hbGxfb3JkZXJlZCA8LSBtZWx0KGFzLm1hdHJpeChjb25nX2FsbF93KSkgJT4lCiAgcmVuYW1lKGZhY3Rvcl9BX29yZGVyZWQgPSBWYXIxLCAKICAgICAgICAgZmFjdG9yX0Jfb3JkZXJlZCA9IFZhcjIsCiAgICAgICAgIGNvbmcgPSB2YWx1ZSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9BID0gYXMuY2hhcmFjdGVyKGZhY3Rvcl9BX29yZGVyZWQpLAogICAgICAgICBmYWN0b3JfQiA9IGFzLmNoYXJhY3RlcihmYWN0b3JfQl9vcmRlcmVkKSkgJT4lCiAgZnVsbF9qb2luKGNvbmdfYWxsICU+JSBzZWxlY3QoY29udGFpbnMoIl9BIikpICU+JSBkaXN0aW5jdCgpKSAlPiUKICBmdWxsX2pvaW4oY29uZ19hbGwgJT4lIHNlbGVjdChjb250YWlucygiX0IiKSkgJT4lIGRpc3RpbmN0KCkpICU+JQogIG11dGF0ZShsYWJfQSA9IHBhc3RlKHBhc3RlKGNvdW50cnlfQSwgYWdlX2dyb3VwX0EpLCBmYWN0b3JfbGFiZGVzY3JpcHRfQSwgc2VwID0gIiwgIiksCiAgICAgICAgIGxhYl9CID0gcGFzdGUocGFzdGUoY291bnRyeV9CLCBhZ2VfZ3JvdXBfQiksIGZhY3Rvcl9sYWJkZXNjcmlwdF9CLCBzZXAgPSAiLCAiKSkKIyBtdXRhdGUoc2FtcGxlX0EgPSBwYXN0ZShjb3VudHJ5X0EsIGFnZV9ncm91cF9BLCBzZXAgPSAiLCAiKSwKIyAgICAgICAgc2FtcGxlX0IgPSBwYXN0ZShjb3VudHJ5X0IsIGFnZV9ncm91cF9CLCBzZXAgPSAiLCAiKSwKIyAgICAgICAgbGFiX0EgPSBwYXN0ZShzYW1wbGVfQSwgZmFjdG9yX2xhYmRlc2NyaXB0X0EsIHNlcCA9ICIgIiksCiMgICAgICAgIGxhYl9CID0gcGFzdGUoc2FtcGxlX0IsIGZhY3Rvcl9sYWJkZXNjcmlwdF9CLCBzZXAgPSAiICIpKQpgYGAKCmBgYHtyIGNvbmcgYWxsIHBhaXJzIHBsb3QsIGZpZy53aWR0aCA9IDkuNSwgZmlnLmFzcCA9IDAuOX0KIyBGSUdVUkUgMgpjb25nX2xvd2VyX2xpbSA8LSBpZmVsc2UobWluKGNvbmdfYWxsX29yZGVyZWQkY29uZykgPiAtMC4wNSwgLTAuMDUsIAogICAgICAgICAgICAgICAgICAgICAgICAgbWluKGNvbmdfYWxsX29yZGVyZWQkY29uZykpCiMgY29uZ19wbG90X2NvbG9ycyA8LSBjKCJyZWQ0IiwgImJsdWU0IiwgImRhcmtvcmNoaWQ0IiwgImJsYWNrIikKIyBjb25nX3Bsb3RfY29sb3JzIDwtIGMoImJsYWNrIiwgImJsYWNrIiwgImJsYWNrIiwgImJsYWNrIikKY29uZ19wbG90X2NvbG9ycyA8LSBjKCJyZWQ0IiwgInJlZDQiLCAicmVkNCIsICJibGFjayIpCgpjb25nX2FsbF9vcmRlcmVkICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIobGFiX0EsIGFzLm51bWVyaWMoZmFjdG9yX0Ffb3JkZXJlZCkpLAogICAgICAgICAgICAgeSA9IHJlb3JkZXIobGFiX0IsIGFzLm51bWVyaWMoZGVzYyhmYWN0b3JfQl9vcmRlcmVkKSkpLAogICAgICAgICAgICAgZmlsbCA9IGNvbmcpKSArIAogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIsIHNpemUgPSAwLjIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKGNvbmcsIDIpLCBuc21hbGwgPSAyKSwKICAgICAgICAgICAgICAgIGNvbG9yID0gY2FzZV93aGVuKGNvbmcgPiAwLjg1IH4gImEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmcgPiAwLjc1IH4gImIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZyA+IDAuNjUgfiAiYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gImQiKSksCiAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogICMgIyBib2R5LWxpa2UgZmFjdG9ycwogICMgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gNS41LCB4bWF4ID0gMTUuNSwgeW1pbiA9IDE2LjUsIHltYXggPSAyNi41LAogICMgICAgICAgICAgY29sb3IgPSBjb25nX3Bsb3RfY29sb3JzWzFdLCBzaXplID0gMS41LCBhbHBoYSA9IDApICsKICAjICMgbWluZC1saWtlIGZhY3RvcnMKICAjIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDE1LjUsIHhtYXggPSAyNS41LCB5bWluID0gNi41LCB5bWF4ID0gMTYuNSwKICAjICAgICAgICAgIGNvbG9yID0gY29uZ19wbG90X2NvbG9yc1syXSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAwKSArCiAgIyAjIGhlYXJ0LWxpa2UgZmFjdG9ycwogICMgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gMjUuNSwgeG1heCA9IDMxLjUsIHltaW4gPSAwLjUsIHltYXggPSA2LjUsCiAgIyAgICAgICAgICBjb2xvciA9IGNvbmdfcGxvdF9jb2xvcnNbM10sIHNpemUgPSAxLjUsIGFscGhhID0gMCkgKwogICMgc2NhbGVfZmlsbF92aXJpZGlzX2ModHJhbnMgPSBzY2FsZXM6OmV4cF90cmFucyhiYXNlID0gZXhwKDEpKSwKICAjICAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoY29uZ19sb3dlcl9saW0sIDEpLCAKICAjICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcShjb25nX2xvd2VyX2xpbSwgMSwgMC4wNSksCiAgIyAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKGZvcm1hdChzZXEoY29uZ19sb3dlcl9saW0sIDAuOCwgMC4wNSksIG5zbWFsbCA9IDIpLAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMC44NSA9IG1vZGVyYXRlIiwgIjAuOTAiLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAuOTUgPSBoaWdoIiwgIjEuMDAiKSwKICAjICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9ICJ2aXJpZGlzIiwKICAjICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gNDApKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudG4oI3RyYW5zID0gc2NhbGVzOjpleHBfdHJhbnMoYmFzZSA9IGV4cCgxKSksCiAgICBsaW1pdHMgPSBjKGNvbmdfbG93ZXJfbGltLCAxKSwgCiAgICBicmVha3MgPSBzZXEoY29uZ19sb3dlcl9saW0sIDEsIDAuMDUpLAogICAgbGFiZWxzID0gYyhmb3JtYXQoc2VxKGNvbmdfbG93ZXJfbGltLCAwLjgsIDAuMDUpLCBuc21hbGwgPSAyKSwKICAgICAgICAgICAgICAgIjAuODUgPSBtb2RlcmF0ZSIsICIwLjkwIiwgCiAgICAgICAgICAgICAgICIwLjk1ID0gaGlnaCIsICIxLjAwIiksCiAgICBjb2xvcnMgPSB2aXJpZGlzTGl0ZTo6dmlyaWRpcyg2KSwKICAgIHZhbHVlcyA9IGMoMCwgMC42NSwgMC43NSwgMC44NSwgMC45NSwgMSksCiAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDQwKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJibGFjayIsICJibGFjayIsICJibGFjayIsICJncmF5NjAiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dCgKICAgICAgIyBhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSwKICAgICAgYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEsCiAgICAgIHNpemUgPSBzaXplX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BLCBzaXplcyA9IGMoMjAsIDE0KSksCiAgICAgIGNvbG9yID0gY29sb3JfZnVuKGNvbmdfYWxsX29yZGVyZWQkbGFiX0EsIGNvbG9yX2xpc3QgPSBjb25nX3Bsb3RfY29sb3JzKSwKICAgICAgZmFjZSAgPSBmYWNlX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BKSksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dCgKICAgICAgc2l6ZSA9IHJldihzaXplX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BLCBzaXplcyA9IGMoMjAsIDE0KSkpLAogICAgICBjb2xvciA9IHJldihjb2xvcl9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgY29sb3JfbGlzdCA9IGNvbmdfcGxvdF9jb2xvcnMpKSwKICAgICAgZmFjZSAgPSByZXYoZmFjZV9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSkpKSwKICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMjApLAogICAgIyBheGlzLnRpY2tzID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjUpLAogICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9saW5lKAogICAgICBzaXplID0gc2l6ZV9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgc2l6ZXMgPSBjKDEuNSwgMC41KSksCiAgICAgIGNvbG9yID0gY29sb3JfZnVuKGNvbmdfYWxsX29yZGVyZWQkbGFiX0EsIGNvbG9yX2xpc3QgPSBjb25nX3Bsb3RfY29sb3JzKSksCiAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2xpbmUoCiAgICAgIHNpemUgPSByZXYoc2l6ZV9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgc2l6ZXMgPSBjKDEuNSwgMC41KSkpLAogICAgICBjb2xvciA9IHJldihjb2xvcl9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgY29sb3JfbGlzdCA9IGNvbmdfcGxvdF9jb2xvcnMpKSksCiAgICBheGlzLnRpY2tzLmxlbmd0aCA9IHVuaXQoMC4yNSwgImNtIikpICsKICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCwgZmlsbCA9IGV4cHJlc3Npb24oaXRhbGljKHJbY10pKSkKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZzAyX2Ryb3AucG5nIikKYGBgCgojIyBKYWNjYXJkIFNpbWlsYXJpdHkKCmBgYHtyIGphY2NhcmQgYWxsIHNhbXBsZXN9CnN0cm9uZ19sb2FkX2FsbCA8LSBsb2FkaW5nc19hZHVsdHMgJT4lCiAgYmluZF9yb3dzKGxvYWRpbmdzX2NoaWxkcmVuKSAlPiUKICBzZWxlY3QoY291bnRyeSwgYWdlX2dyb3VwLCBmYWN0b3IsIGNhcGFjaXR5LCBsb2FkaW5nKSAlPiUKICBtdXRhdGUoc3Ryb25nX2xvYWQgPSBpZmVsc2UobG9hZGluZyA+PSAwLjUsIDEsIDApKSAlPiUKICBzZWxlY3QoLWxvYWRpbmcpCgpjcm9zc19sb2FkX2FsbCA8LSBzdHJvbmdfbG9hZF9hbGwgJT4lCiAgZmlsdGVyKHN0cm9uZ19sb2FkID09IDEpICU+JQogIGNvdW50KGNvdW50cnksIGFnZV9ncm91cCwgY2FwYWNpdHksIHN0cm9uZ19sb2FkKSAlPiUKICBmaWx0ZXIobiA+IDEpICU+JQogIG11dGF0ZShjcm9zc19sb2FkID0gVCkgJT4lCiAgc2VsZWN0KGNvdW50cnksIGFnZV9ncm91cCwgY2FwYWNpdHksIGNyb3NzX2xvYWQpCgpzdHJvbmdfbm9uY3Jvc3NfbG9hZF9hbGwgPC0gc3Ryb25nX2xvYWRfYWxsICU+JQogIGxlZnRfam9pbihjcm9zc19sb2FkX2FsbCkgJT4lCiAgZmlsdGVyKGlzLm5hKGNyb3NzX2xvYWQpKQoKamFjY2FyZF9hbGwgPC0gc3Ryb25nX25vbmNyb3NzX2xvYWRfYWxsICU+JQogIHNlbGVjdChmYWN0b3IsIGNhcGFjaXR5LCBzdHJvbmdfbG9hZCkgJT4lCiAgc3ByZWFkKGZhY3Rvciwgc3Ryb25nX2xvYWQpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygiY2FwYWNpdHkiKSAlPiUKICB0KCkgJT4lCiAgZGlzdChtZXRob2QgPSAiYmluYXJ5IiwgZGlhZyA9IFQsIHVwcGVyID0gVCkgJT4lCiAgYXMubWF0cml4KCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiZmFjdG9yX0EiKSAlPiUKICBnYXRoZXIoZmFjdG9yX0IsIGphY2NhcmQsIC1mYWN0b3JfQSkgJT4lCiAgIyBjb21wdXRlIHNpbWlsYXJpdHkgaW5kZXggaW5zdGVhZCBvZiBkaXN0YW5jZQogIG11dGF0ZShqYWNjYXJkID0gMSAtIGphY2NhcmQpICU+JQogIGxlZnRfam9pbihiaW5kX3Jvd3MoZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9hbGwoZnVucyhwYXN0ZSguLCAiQSIsIHNlcCA9ICJfIikpKSwKICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lc19jaGlsZHJlbiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJBIiwgc2VwID0gIl8iKSkpKSkgJT4lCiAgbGVmdF9qb2luKGJpbmRfcm93cyhmYWN0b3JfbmFtZXNfYWR1bHRzICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJCIiwgc2VwID0gIl8iKSkpLAogICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2NoaWxkcmVuICU+JQogICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkIiLCBzZXAgPSAiXyIpKSkpKQpgYGAKCmBgYHtyIGphY2NhcmQgYWxsIHBhaXJzIGZvcm1hdH0KIyBtYWtlIHdpZGUtZm9ybSB2ZXJzaW9uIG9mIGRmCmphY2NhcmRfYWxsX3cgPC0gamFjY2FyZF9hbGwgJT4lCiAgc2VsZWN0KGZhY3Rvcl9BLCBmYWN0b3JfQiwgamFjY2FyZCkgJT4lCiAgc3ByZWFkKGZhY3Rvcl9CLCBqYWNjYXJkKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoImZhY3Rvcl9BIikKCiMgdHJlYXQgZGlzdGFuY2UgbWF0cml4IGFzIGlmIGl0IHdlcmUgdGhlIGNvcnJlbGF0aW9uIG1hdHJpeCBmb3IgaGNsdXN0CnJvdy5vcmRlciA8LSBoY2x1c3QoYXMuZGlzdCgoMSAtIGphY2NhcmRfYWxsX3cpLzIpKSRvcmRlcgpjb2wub3JkZXIgPC0gaGNsdXN0KGFzLmRpc3QodCgoMSAtIGphY2NhcmRfYWxsX3cpLzIpKSkkb3JkZXIKCiMgcmUtb3JkZXIgbWF0cml4IGFjY29yaW5nIHRvIGNsdXN0ZXJpbmcKamFjY2FyZF9hbGxfdyA8LSBqYWNjYXJkX2FsbF93W3Jvdy5vcmRlciwgY29sLm9yZGVyXSAKCiMgZm9yIHNvbWUgcmVhc29uIHJlc2hhcGUyOjptZWx0KCkgd29ya3MgYmV0dGVyIHRoYW4gY3VycmVudCB0aWR5dmVyc2UgZnVuY3Rpb25zLi4uCmphY2NhcmRfYWxsX29yZGVyZWQgPC0gbWVsdChhcy5tYXRyaXgoamFjY2FyZF9hbGxfdykpICU+JQogIHJlbmFtZShmYWN0b3JfQV9vcmRlcmVkID0gVmFyMSwgCiAgICAgICAgIGZhY3Rvcl9CX29yZGVyZWQgPSBWYXIyLAogICAgICAgICBqYWNjYXJkID0gdmFsdWUpICU+JQogIG11dGF0ZShmYWN0b3JfQSA9IGFzLmNoYXJhY3RlcihmYWN0b3JfQV9vcmRlcmVkKSwKICAgICAgICAgZmFjdG9yX0IgPSBhcy5jaGFyYWN0ZXIoZmFjdG9yX0Jfb3JkZXJlZCkpICU+JQogIGZ1bGxfam9pbihqYWNjYXJkX2FsbCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJfQSIpKSAlPiUgZGlzdGluY3QoKSkgJT4lCiAgZnVsbF9qb2luKGphY2NhcmRfYWxsICU+JSBzZWxlY3QoY29udGFpbnMoIl9CIikpICU+JSBkaXN0aW5jdCgpKSAlPiUKICBtdXRhdGUobGFiX0EgPSBwYXN0ZShwYXN0ZShjb3VudHJ5X0EsIGFnZV9ncm91cF9BKSwgZmFjdG9yX2xhYmRlc2NyaXB0X0EsIHNlcCA9ICIsICIpLAogICAgICAgICBsYWJfQiA9IHBhc3RlKHBhc3RlKGNvdW50cnlfQiwgYWdlX2dyb3VwX0IpLCBmYWN0b3JfbGFiZGVzY3JpcHRfQiwgc2VwID0gIiwgIikpCiMgbXV0YXRlKHNhbXBsZV9BID0gcGFzdGUoY291bnRyeV9BLCBhZ2VfZ3JvdXBfQSwgc2VwID0gIiwgIiksCiMgICAgICAgIHNhbXBsZV9CID0gcGFzdGUoY291bnRyeV9CLCBhZ2VfZ3JvdXBfQiwgc2VwID0gIiwgIiksCiMgICAgICAgIGxhYl9BID0gcGFzdGUoc2FtcGxlX0EsIGZhY3Rvcl9sYWJkZXNjcmlwdF9BLCBzZXAgPSAiICIpLAojICAgICAgICBsYWJfQiA9IHBhc3RlKHNhbXBsZV9CLCBmYWN0b3JfbGFiZGVzY3JpcHRfQiwgc2VwID0gIiAiKSkKYGBgCgpgYGB7ciBqYWNjYXJkIGFsbCBwYWlycyBwbG90LCBmaWcud2lkdGggPSA5LjUsIGZpZy5hc3AgPSAwLjl9CiMgRklHVVJFIFMxCmphY2NhcmRfbG93ZXJfbGltIDwtIGlmZWxzZShtaW4oamFjY2FyZF9hbGxfb3JkZXJlZCRqYWNjYXJkKSA+IDAsIDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgbWluKGphY2NhcmRfYWxsX29yZGVyZWQkamFjY2FyZCkpCiMgamFjY2FyZF9wbG90X2NvbG9ycyA8LSBjKCJyZWQ0IiwgImJsdWU0IiwgImRhcmtvcmNoaWQ0IiwgImJsYWNrIikKIyBqYWNjYXJkX3Bsb3RfY29sb3JzIDwtIGMoImJsYWNrIiwgImJsYWNrIiwgImJsYWNrIiwgImJsYWNrIikKamFjY2FyZF9wbG90X2NvbG9ycyA8LSBjKCJyZWQ0IiwgInJlZDQiLCAicmVkNCIsICJibGFjayIpCgpqYWNjYXJkX2FsbF9vcmRlcmVkICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIobGFiX0EsIGFzLm51bWVyaWMoZmFjdG9yX0Ffb3JkZXJlZCkpLAogICAgICAgICAgICAgeSA9IHJlb3JkZXIobGFiX0IsIGFzLm51bWVyaWMoZGVzYyhmYWN0b3JfQl9vcmRlcmVkKSkpLAogICAgICAgICAgICAgZmlsbCA9IGphY2NhcmQpKSArIAogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIsIHNpemUgPSAwLjIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY2FzZV93aGVuKAogICAgIyBqYWNjYXJkICVpbiUgYygwLCAxKSB+IGZvcm1hdChyb3VuZChqYWNjYXJkLCAwKSwgbnNtYWxsID0gMCksCiAgICBUUlVFIH4gZm9ybWF0KHJvdW5kKGphY2NhcmQsIDIpLCBuc21hbGwgPSAyKSksCiAgICBjb2xvciA9IGNhc2Vfd2hlbihqYWNjYXJkID49IDAuNzUgfiAiYSIsIAogICAgICAgICAgICAgICAgICAgICAgamFjY2FyZCA+PSAwLjUgfiAiYiIsCiAgICAgICAgICAgICAgICAgICAgICBqYWNjYXJkID49IDAuMjUgfiAiYyIsCiAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gImQiKSksCiAgICBzaG93LmxlZ2VuZCA9IEYpICsKICAjICMgbWluZC1saWtlIGFuZCBvdGhlciBmYWN0b3JzCiAgIyBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAwLjUsIHhtYXggPSAxNC41LCB5bWluID0gMTcuNSwgeW1heCA9IDMxLjUsCiAgIyAgICAgICAgICBjb2xvciA9IGphY2NhcmRfcGxvdF9jb2xvcnNbMl0sIHNpemUgPSAxLjUsIGFscGhhID0gMCkgKwogICMgIyBib2R5LWxpa2UgZmFjdG9ycwogICMgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gMTQuNSwgeG1heCA9IDI0LjUsIHltaW4gPSA3LjUsIHltYXggPSAxNy41LAogICMgICAgICAgICAgY29sb3IgPSBqYWNjYXJkX3Bsb3RfY29sb3JzWzFdLCBzaXplID0gMS41LCBhbHBoYSA9IDApICsKICAjICMgaGVhcnQtbGlrZSBmYWN0b3JzCiAgIyBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAyNC41LCB4bWF4ID0gMzEuNSwgeW1pbiA9IDAuNSwgeW1heCA9IDcuNSwKICAjICAgICAgICAgIGNvbG9yID0gamFjY2FyZF9wbG90X2NvbG9yc1szXSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAwKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzX2MoI3RyYW5zID0gc2NhbGVzOjpleHBfdHJhbnMoYmFzZSA9IGV4cCgxKSksCiAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYyhqYWNjYXJkX2xvd2VyX2xpbSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKGphY2NhcmRfbG93ZXJfbGltLCAxLCAwLjA1KSwKICAgICAgICAgICAgICAgICAgICAgICAjIGxhYmVscyA9IGMoZm9ybWF0KHNlcShqYWNjYXJkX2xvd2VyX2xpbSwgMC44LCAwLjA1KSwgCiAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICBuc21hbGwgPSAyKSwKICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgIjAuODUgPSBtb2RlcmF0ZSIsICIwLjkwIiwKICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgIjAuOTUgPSBoaWdoIiwgIjEuMDAiKSwKICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSAidmlyaWRpcyIsIAogICAgICAgICAgICAgICAgICAgICAgICMgZGlyZWN0aW9uID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSA0MCkpICsKICAjIHNjYWxlX2ZpbGxfZ3JhZGllbnRuKCN0cmFucyA9IHNjYWxlczo6ZXhwX3RyYW5zKGJhc2UgPSBleHAoMSkpLAogICMgICBsaW1pdHMgPSBjKGphY2NhcmRfbG93ZXJfbGltLCAxKSwgCiAgIyAgIGJyZWFrcyA9IHNlcShqYWNjYXJkX2xvd2VyX2xpbSwgMSwgMC4wNSksCiAgIyAgIGxhYmVscyA9IGMoZm9ybWF0KHNlcShqYWNjYXJkX2xvd2VyX2xpbSwgMC44LCAwLjA1KSwgbnNtYWxsID0gMiksCiAgIyAgICAgICAgICAgICAgIjAuODUgPSBtb2RlcmF0ZSIsICIwLjkwIiwgCiAgIyAgICAgICAgICAgICAgIjAuOTUgPSBoaWdoIiwgIjEuMDAiKSwKICAjICAgY29sb3JzID0gdmlyaWRpc0xpdGU6OnZpcmlkaXMoNiksCiAgIyAgIHZhbHVlcyA9IGMoMCwgMC42NSwgMC43NSwgMC44NSwgMC45NSwgMSksCiAgIyAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gNDApKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgImJsYWNrIiwgImJsYWNrIiwgImdyYXk2MCIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KAogICAgICAjIGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxLAogICAgICBhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSwKICAgICAgc2l6ZSA9IHNpemVfZnVuKGphY2NhcmRfYWxsX29yZGVyZWQkbGFiX0EsIHNpemVzID0gYygyMCwgMTQpKSwKICAgICAgY29sb3IgPSBjb2xvcl9mdW4oamFjY2FyZF9hbGxfb3JkZXJlZCRsYWJfQSwgY29sb3JfbGlzdCA9IGphY2NhcmRfcGxvdF9jb2xvcnMpLAogICAgICBmYWNlICA9IGZhY2VfZnVuKGphY2NhcmRfYWxsX29yZGVyZWQkbGFiX0EpKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KAogICAgICBzaXplID0gcmV2KHNpemVfZnVuKGphY2NhcmRfYWxsX29yZGVyZWQkbGFiX0EsIHNpemVzID0gYygyMCwgMTQpKSksCiAgICAgIGNvbG9yID0gcmV2KGNvbG9yX2Z1bihqYWNjYXJkX2FsbF9vcmRlcmVkJGxhYl9BLCBjb2xvcl9saXN0ID0gamFjY2FyZF9wbG90X2NvbG9ycykpLAogICAgICBmYWNlICA9IHJldihmYWNlX2Z1bihqYWNjYXJkX2FsbF9vcmRlcmVkJGxhYl9BKSkpLAogICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMCksCiAgICAjIGF4aXMudGlja3MgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSksCiAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2xpbmUoCiAgICAgIHNpemUgPSBzaXplX2Z1bihqYWNjYXJkX2FsbF9vcmRlcmVkJGxhYl9BLCBzaXplcyA9IGMoMS41LCAwLjUpKSwKICAgICAgY29sb3IgPSBjb2xvcl9mdW4oamFjY2FyZF9hbGxfb3JkZXJlZCRsYWJfQSwgY29sb3JfbGlzdCA9IGphY2NhcmRfcGxvdF9jb2xvcnMpKSwKICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfbGluZSgKICAgICAgc2l6ZSA9IHJldihzaXplX2Z1bihqYWNjYXJkX2FsbF9vcmRlcmVkJGxhYl9BLCBzaXplcyA9IGMoMS41LCAwLjUpKSksCiAgICAgIGNvbG9yID0gcmV2KGNvbG9yX2Z1bihqYWNjYXJkX2FsbF9vcmRlcmVkJGxhYl9BLCBjb2xvcl9saXN0ID0gamFjY2FyZF9wbG90X2NvbG9ycykpKSwKICAgIGF4aXMudGlja3MubGVuZ3RoID0gdW5pdCgwLjI1LCAiY20iKSkgKwogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMLCBmaWxsID0gIkphY2NhcmRcbnNpbWlsYXJpdHkiKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnUzAxX2Ryb3AucG5nIikKYGBgCgojIyBEZXZlbG9wbWVudGFsIGNvbXBhcmlzb25zCgpgYGB7ciBkZXYgY29tcCBhbGwgc2l0ZXMsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLjJ9CiMgRklHVVJFIFM2LCBGSUdVUkUgUzcsIEZJR1VSRSBTOCwgRklHVVJFIFM5LCBGSUdVUkUgUzEwCnBsb3RfZ3JpZChoZWF0bWFwX2NvbXBfZnVuKAogIGVmYV9saXN0ID0gbGlzdChlZmFfdXNfYWR1bHRzLCBlZmFfdXNfY2hpbGRyZW4pLCBwYWRkaW5nID0gRiksCiAgZGV2X2NvbmdfcGxvdF9mdW4oY29uZ19kZl9jaGlsZHJlbiwgd2hpY2hfY291bnRyeSA9ICJVUyIsIHBhZGRpbmcgPSBUKSwKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDIsIDEuNSksIGxhYmVscyA9ICJBVVRPIikKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MwNl9kcm9wLnBuZyIpCgpwbG90X2dyaWQoaGVhdG1hcF9jb21wX2Z1bigKICBlZmFfbGlzdCA9IGxpc3QoZWZhX2doX2FkdWx0cywgZWZhX2doX2NoaWxkcmVuKSwgcGFkZGluZyA9IEYpLAogIGRldl9jb25nX3Bsb3RfZnVuKGNvbmdfZGZfY2hpbGRyZW4sIHdoaWNoX2NvdW50cnkgPSAiR2hhbmEiLCBwYWRkaW5nID0gVCksCiAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygyLCAxLjUpLCBsYWJlbHMgPSAiQVVUTyIpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMDdfZHJvcC5wbmciKQoKcGxvdF9ncmlkKGhlYXRtYXBfY29tcF9mdW4oCiAgZWZhX2xpc3QgPSBsaXN0KGVmYV90aF9hZHVsdHMsIGVmYV90aF9jaGlsZHJlbiksIHBhZGRpbmcgPSBGKSwKICBkZXZfY29uZ19wbG90X2Z1bihjb25nX2RmX2NoaWxkcmVuLCB3aGljaF9jb3VudHJ5ID0gIlRoYWlsYW5kIiwgcGFkZGluZyA9IFQpLAogIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMiwgMS41KSwgbGFiZWxzID0gIkFVVE8iKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnUzA4X2Ryb3AucG5nIikKCnBsb3RfZ3JpZChoZWF0bWFwX2NvbXBfZnVuKAogIGVmYV9saXN0ID0gbGlzdChlZmFfY2hfYWR1bHRzLCBlZmFfY2hfY2hpbGRyZW4pLCBwYWRkaW5nID0gRiksCiAgZGV2X2NvbmdfcGxvdF9mdW4oY29uZ19kZl9jaGlsZHJlbiwgd2hpY2hfY291bnRyeSA9ICJDaGluYSIsIHBhZGRpbmcgPSBUKSwKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDIsIDEuNSksIGxhYmVscyA9ICJBVVRPIikKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MwOV9kcm9wLnBuZyIpCgpwbG90X2dyaWQoaGVhdG1hcF9jb21wX2Z1bigKICBlZmFfbGlzdCA9IGxpc3QoZWZhX3Z0X2FkdWx0cywgZWZhX3Z0X2NoaWxkcmVuKSwgcGFkZGluZyA9IEYpLAogIGRldl9jb25nX3Bsb3RfZnVuKGNvbmdfZGZfY2hpbGRyZW4sIHdoaWNoX2NvdW50cnkgPSAiVmFudWF0dSIsIHBhZGRpbmcgPSBUKSwKICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDIsIDEuNSksIGxhYmVscyA9ICJBVVRPIikKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MxMF9kcm9wLnBuZyIpCmBgYAoKYGBge3IgbG9hZGluZ3MgYWxsIHNhbXBsZXMsIGZpZy53aWR0aCA9IDYuNSwgZmlnLmFzcCA9IDAuNn0KIyBGSUdVUkUgMSwgdmVyc2lvbiAxCmhlYXRtYXBfY29tcF9mdW4obGlzdChlZmFfdXNfYWR1bHRzLCBlZmFfZ2hfYWR1bHRzLCBlZmFfdGhfYWR1bHRzLCAKICAgICAgICAgICAgICAgICAgICAgIGVmYV9jaF9hZHVsdHMsIGVmYV92dF9hZHVsdHMsIAogICAgICAgICAgICAgICAgICAgICAgZWZhX3VzX2NoaWxkcmVuLCBlZmFfZ2hfY2hpbGRyZW4sIGVmYV90aF9jaGlsZHJlbiwgCiAgICAgICAgICAgICAgICAgICAgICBlZmFfY2hfY2hpbGRyZW4sIGVmYV92dF9jaGlsZHJlbiksIAogICAgICAgICAgICAgICAgIGZhY2V0X29yZGVyX3ZhcnMgPSBjKCJhZ2VfZ3JvdXAiLCAiY291bnRyeSIsICJmbnVtIiksCiAgICAgICAgICAgICAgICAgZmFjZXRfbGFiX3NwbGl0ID0gVCkgKwogIHRoZW1lKHBhbmVsLnNwYWNpbmcueCA9IHVuaXQoYyhyZXAoMC4yLCA0KSwgMSwgcmVwKDAuMiwgNCkpLCAibGluZSIpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvcmJhcihiYXJ3aWR0aCA9IDMwLCBiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiRmFjdG9yIGxvYWRpbmciLCB0aXRsZS52anVzdCA9IDEpKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnMDF2MV9kcm9wLnBuZyIpCmBgYAoKYGBge3IgZG9taW5hbnQgZmFjdG9yLCBmaWcud2lkdGggPSA2LjUsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBGfQojIGhpZ2hsaWdodGluZyBkb21pbmFudCBmYWN0b3IgKGlnbm9yaW5nIGNyb3NzLWxvYWRpbmdzID4gMC4wNSkKbG9hZGluZ3NfYWxsIDwtIGxvYWRpbmdzX2FkdWx0cyAlPiUKICBzZWxlY3QoLWNvbnRhaW5zKCJvcmQiKSkgJT4lCiAgZnVsbF9qb2luKGxvYWRpbmdzX2NoaWxkcmVuICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtY29udGFpbnMoIm9yZCIpKSkKCmRvbV9mYWN0b3JzX2FsbCA8LSBsb2FkaW5nc19hbGwgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSwgYWdlX2dyb3VwLCBjYXBhY2l0eSkgJT4lIAogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdChjb3VudHJ5LCBhZ2VfZ3JvdXAsIGNhcGFjaXR5LCBmYWN0b3IsIGxvYWRpbmcpICU+JQogIHJlbmFtZShkb21fZmFjdG9yID0gZmFjdG9yLAogICAgICAgICBkb21fbG9hZGluZyA9IGxvYWRpbmcpCgpyZWN0X2RmIDwtIGxvYWRpbmdzX2FsbCAlPiUKICBmdWxsX2pvaW4oZG9tX2ZhY3RvcnNfYWxsKSAlPiUKICBtdXRhdGUoZm51bSA9IGdzdWIoIi4qX0YiLCAiRiIsIGZhY3RvcikpICU+JQogIHNlbGVjdCgtc3RhcnRzX3dpdGgoImZhY3RvciIpKSAlPiUKICBzcHJlYWQoZm51bSwgbG9hZGluZykgJT4lCiAgbXV0YXRlKGRpZmYxID0gYWJzKGRvbV9sb2FkaW5nKSAtIGFicyhGMSksCiAgICAgICAgIGRpZmYyID0gYWJzKGRvbV9sb2FkaW5nKSAtIGFicyhGMiksCiAgICAgICAgIGRpZmYzID0gYWJzKGRvbV9sb2FkaW5nKSAtIGFicyhGMyksCiAgICAgICAgIGRpZmY0ID0gYWJzKGRvbV9sb2FkaW5nKSAtIGFicyhGNCkpICU+JQogIHNlbGVjdCgtYyhkb21fbG9hZGluZywgc3RhcnRzX3dpdGgoIkYiKSkpICU+JQogIGdhdGhlcih3aGljaF9kaWZmLCBkaWZmLCBzdGFydHNfd2l0aCgiZGlmZiIpKSAlPiUKICBmaWx0ZXIoZGlmZiAhPSAwLCAhaXMubmEoZGlmZikpICU+JQogIGdyb3VwX2J5KGNvdW50cnksIGFnZV9ncm91cCwgY2FwYWNpdHkpICU+JQogIHRvcF9uKC0xLCBkaWZmKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGFueV9zbWFsbCA9IGRpZmYgPCAwLjA1KSAlPiUKICByZW5hbWUoZmFjdG9yID0gZG9tX2ZhY3RvcikgJT4lCiAgbGVmdF9qb2luKGZ1bGxfam9pbihmYWN0b3JfbmFtZXNfYWR1bHRzLCBmYWN0b3JfbmFtZXNfY2hpbGRyZW4pKQoKIyBhbmFsb2cgdG8gRklHVVJFIDEKdGVtcF9jYXBfb3JkZXIgPC0gZmEuc29ydChlZmFfdXNfYWR1bHRzKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpICU+JSByZXYoKQoKZ2dwbG90KHJlY3RfZGYgJT4lCiAgICAgICAgIGZpbHRlcighaXMubmEoYW55X3NtYWxsKSkgJT4lCiAgICAgICAgIG11dGF0ZShjYXBhY2l0eSA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gdGVtcF9jYXBfb3JkZXIpKSwKICAgICAgIGFlcyh4ID0gZmFjdG9yX2xhYmRlc2NyaXB0LCAKICAgICAgICAgICB5ID0gY2FwYWNpdHksIAogICAgICAgICAgIGZpbGwgPSBhbnlfc21hbGwpKSArCiAgZmFjZXRfZ3JpZCh+IGludGVyYWN0aW9uKGNvdW50cnksIGFnZV9ncm91cCksIHNwYWNlID0gImZyZWUiLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoKSArCiAgdGhlbWUocGFuZWwuc3BhY2luZy54ID0gdW5pdChjKHJlcCgwLjIsIDQpLCAxLCByZXAoMC4yLCA0KSksICJsaW5lIiksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQojIGdnc2F2ZSgiLi4vZmlndXJlcy9maWcwMXYyX2Ryb3AucG5nIikKYGBgCgpgYGB7ciBsb2FkaW5ncyBhbGwgc2FtcGxlcyB2MiwgZmlnLndpZHRoID0gNi41LCBmaWcuYXNwID0gMC42fQojIEZJR1VSRSAxLCB2ZXJzaW9uIDIgKGluY2x1ZGVkIGluIG1haW4gdGV4dCkKbG9hZGluZ3NfYWR1bHRzICU+JQogIGJpbmRfcm93cyhsb2FkaW5nc19jaGlsZHJlbikgJT4lCiAgIyBzZWxlY3QoLWNvbnRhaW5zKCJfb3JkIikpICU+JQogIG11dGF0ZShmYWN0b3JfYmhtID0gY2FzZV93aGVuKAogICAgZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdCkpIH4gIkJPRFktbGlrZSBmYWN0b3JzIiwKICAgIGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHQpKSB+ICJNSU5ELWxpa2UgZmFjdG9ycyIsCiAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdCkpIH4gIkhFQVJULWxpa2UgZmFjdG9ycyIsCiAgICBUUlVFIH4gIk90aGVyIikpICU+JQogIGxlZnRfam9pbihzdHJvbmdfbm9uY3Jvc3NfbG9hZF9hbGwgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChmYWN0b3IsIGNhcGFjaXR5LCBzdHJvbmdfbG9hZCwgY3Jvc3NfbG9hZCkpICU+JQogIG11dGF0ZShmb250X2ZhY2UgPSBjYXNlX3doZW4oCiAgICBzdHJvbmdfbG9hZCA9PSAxICYgaXMubmEoY3Jvc3NfbG9hZCkgfiAiYm9sZCIsCiAgICBUUlVFIH4gInBsYWluIikpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIocGFzdGUoZ3N1YigiRmFjdG9yICIsICJGIiwgZmFjdG9yX25hbWUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9kZXNjcmlwdCwgc2VwID0gIjogIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgYXMubnVtZXJpYyhjb3VudHJ5KSksIAogICAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHlfb3JkX3VzLCBkZXNjKGNhcGFjaXR5X29yZF91cykpLAogICAgICAgICAgICAgZmlsbCA9IGxvYWRpbmcpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhmYWN0b3JfYmhtLCBhZ2VfZ3JvdXApLCAKICAgICAgICAgICAgIHNjYWxlcyA9ICJmaXhlZCIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpLCAKICAgICAgICAgICAgICAgIGZvbnRmYWNlID0gZm9udF9mYWNlKSwgc2l6ZSA9IDMpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBwYW5lbC5zcGFjaW5nLnggPSB1bml0KGMoMC4yLCAxLCAwLjIsIDEsIDAuMiwgMSksICJsaW5lIiksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG9yYmFyKGJhcndpZHRoID0gMzAsIGJhcmhlaWdodCA9IDAuNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJGYWN0b3IgbG9hZGluZyIsIHRpdGxlLnZqdXN0ID0gMSkpCiAgIyBzZWxlY3QoY291bnRyeSwgY2FwYWNpdHksIGxvYWRpbmcpICU+JQogICMgbXV0YXRlKGxvYWRpbmcgPSByb3VuZChsb2FkaW5nLCAyKSkgJT4lCiAgIyBzcHJlYWQoY291bnRyeSwgbG9hZGluZykKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZzAxdjJfZHJvcC5wbmciKQpgYGAKCiMjIFZhcmlhbmNlIGFjY291bnRlZCBmb3IKCmBgYHtyfQpWYWNjb3VudGVkX2Z1biA8LSBmdW5jdGlvbihlZmFfbmFtZSkgewogIGNvdW50cnkgPC0gZ3N1YigiZWZhXyIsICIiLCBlZmFfbmFtZSkKICBjb3VudHJ5IDwtIGdzdWIoIl8uKiQiLCAiIiwgY291bnRyeSkKICBhZ2VfZ3JvdXAgPC0gY2FzZV93aGVuKGdyZXBsKCJhZHVsdCIsIGVmYV9uYW1lKSB+ICJhZHVsdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoImNoaWxkIiwgZWZhX25hbWUpIH4gImNoaWxkcmVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKQogIAogIGVmYSA8LSBnZXQoZWZhX25hbWUpCiAgcmVzIDwtIGVmYSRWYWNjb3VudGVkICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJtZXRyaWMiKSAlPiUKICAgIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGxldmVsc19jb3VudHJ5KSwKICAgICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwLCBsZXZlbHMgPSBjKCJhZHVsdHMiLCAiY2hpbGRyZW4iKSkpCiAgCiAgcmV0dXJuKHJlcykKfQpgYGAKCmBgYHtyfQpWYWNjb3VudGVkX2FsbCA8LSBWYWNjb3VudGVkX2Z1bigiZWZhX3VzX2FkdWx0cyIpICU+JQogIGZ1bGxfam9pbihWYWNjb3VudGVkX2Z1bigiZWZhX2doX2FkdWx0cyIpKSAlPiUKICBmdWxsX2pvaW4oVmFjY291bnRlZF9mdW4oImVmYV90aF9hZHVsdHMiKSkgJT4lCiAgZnVsbF9qb2luKFZhY2NvdW50ZWRfZnVuKCJlZmFfY2hfYWR1bHRzIikpICU+JQogIGZ1bGxfam9pbihWYWNjb3VudGVkX2Z1bigiZWZhX3Z0X2FkdWx0cyIpKSAlPiUKICBmdWxsX2pvaW4oVmFjY291bnRlZF9mdW4oImVmYV91c19jaGlsZHJlbiIpKSAlPiUKICBmdWxsX2pvaW4oVmFjY291bnRlZF9mdW4oImVmYV9naF9jaGlsZHJlbiIpKSAlPiUKICBmdWxsX2pvaW4oVmFjY291bnRlZF9mdW4oImVmYV90aF9jaGlsZHJlbiIpKSAlPiUKICBmdWxsX2pvaW4oVmFjY291bnRlZF9mdW4oImVmYV9jaF9jaGlsZHJlbiIpKSAlPiUKICBmdWxsX2pvaW4oVmFjY291bnRlZF9mdW4oImVmYV92dF9jaGlsZHJlbiIpKQpgYGAKCmBgYHtyfQpWYWNjb3VudGVkX2FsbCAlPiUKICBmaWx0ZXIobWV0cmljICVpbiUgYygiUHJvcG9ydGlvbiBWYXIiLCAiUHJvcG9ydGlvbiBFeHBsYWluZWQiKSkgJT4lCiAgZ2F0aGVyKGZhY3RvciwgdmFsdWUsIHN0YXJ0c193aXRoKCJGIikpICU+JQogIG11dGF0ZSh2YWx1ZSA9IHJvdW5kKHZhbHVlLCAyKSkgJT4lCiAgc3ByZWFkKGNvdW50cnksIHZhbHVlKSAlPiUKICBhcnJhbmdlKGFnZV9ncm91cCwgZmFjdG9yLCBtZXRyaWMpCmBgYApgYGB7cn0KVmFjY291bnRlZF9hbGwgJT4lCiAgZmlsdGVyKG1ldHJpYyA9PSAiQ3VtdWxhdGl2ZSBWYXIiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCB2YWx1ZSwgc3RhcnRzX3dpdGgoIkYiKSkgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSwgYWdlX2dyb3VwKSAlPiUKICB0b3BfbigxLCB2YWx1ZSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZSh2YWx1ZSA9IHJvdW5kKHZhbHVlLCAyKSkgJT4lCiAgc2VsZWN0KG1ldHJpYywgY291bnRyeSwgYWdlX2dyb3VwLCB2YWx1ZSkgJT4lCiAgc3ByZWFkKGNvdW50cnksIHZhbHVlKSAlPiUKICBhcnJhbmdlKGFnZV9ncm91cCwgbWV0cmljKQpgYGAKCiMjIEludGVyZmFjdG9yIGNvcnJlbGF0aW9ucwoKYGBge3IsIGluY2x1ZGUgPSBGfQppbnRlcmZhY3Rvcl9jb3JfZnVuIDwtIGZ1bmN0aW9uKGVmYV9uYW1lKSB7CiAgc2FtcGxlID0gZ3N1YigiZWZhXyIsICIiLCBlZmFfbmFtZSkKICBjb3VudHJ5ID0gZ3N1YigiXy4qJCIsICIiLCBzYW1wbGUpCiAgYWdlX2dyb3VwID0gZ3N1YigiXi4qXyIsICIiLCBzYW1wbGUpCiAgCiAgZWZhIDwtIGdldChlZmFfbmFtZSkKICAKICAjIGhhY2t5LCBub3Qgc3VyZSB3aHkgdGhpcyB3b3JrcywgYnV0IGl0J3MgdGhlIG9ubHkgd2F5IGkgY291bGQgZ2V0IENJcwogIGRmIDwtIHByaW50KGVmYSkgJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oImZhY3Rvcl9wYWlyIikgJT4lCiAgICBzZXBhcmF0ZShmYWN0b3JfcGFpciwgYygiZmFjdG9yX0EiICwiZmFjdG9yX0IiKSwgc2VwID0gIi0iKSAlPiUKICAgIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJmYWN0b3IiKSksIH4gZ3N1YigiXi4qXyIsICIiLCAuKSkKICAKICAjIGRmIDwtIGVmYSRQaGkgJT4lCiAgIyAgIGRhdGEuZnJhbWUoKSAlPiUKICAjICAgcm93bmFtZXNfdG9fY29sdW1uKCJmYWN0b3JfQSIpCiAgIyBnYXRoZXIoZmFjdG9yX0IsIHBoaSwgLWZhY3Rvcl9BKQogIAogIGRmIDwtIGRmICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJmYWN0b3IiKSksCiAgICAgICAgICAgIH4gcGFzdGUwKGNvdW50cnksIHRvdXBwZXIoYWdlX2dyb3VwKSwgIl8iLCAuKSkgJT4lCiAgICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGxldmVsc19jb3VudHJ5KSwKICAgICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwLCBsZXZlbHMgPSBjKCJhZHVsdHMiLCAiY2hpbGRyZW4iKSkpCiAgCiAgcmV0dXJuKGRmKQp9CmBgYAoKYGBge3IsIHJlc3VsdHMgPSAiaGlkZSIsICwgaW5jbHVkZSA9IEZ9CmRfcGhpIDwtIGJpbmRfcm93cyhpbnRlcmZhY3Rvcl9jb3JfZnVuKCJlZmFfdXNfYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgICBpbnRlcmZhY3Rvcl9jb3JfZnVuKCJlZmFfZ2hfYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgICBpbnRlcmZhY3Rvcl9jb3JfZnVuKCJlZmFfdGhfYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgICBpbnRlcmZhY3Rvcl9jb3JfZnVuKCJlZmFfY2hfYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgICBpbnRlcmZhY3Rvcl9jb3JfZnVuKCJlZmFfdnRfYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgICBpbnRlcmZhY3Rvcl9jb3JfZnVuKCJlZmFfdXNfY2hpbGRyZW4iKSwKICAgICAgICAgICAgICAgICAgIGludGVyZmFjdG9yX2Nvcl9mdW4oImVmYV9naF9jaGlsZHJlbiIpLAogICAgICAgICAgICAgICAgICAgaW50ZXJmYWN0b3JfY29yX2Z1bigiZWZhX3RoX2NoaWxkcmVuIiksCiAgICAgICAgICAgICAgICAgICBpbnRlcmZhY3Rvcl9jb3JfZnVuKCJlZmFfY2hfY2hpbGRyZW4iKSwKICAgICAgICAgICAgICAgICAgIGludGVyZmFjdG9yX2Nvcl9mdW4oImVmYV92dF9jaGlsZHJlbiIpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF9waGkgPC0gZF9waGkgJT4lCiAgZnVsbF9qb2luKGRfcGhpICU+JQogICAgICAgICAgICAgIHJlbmFtZV9hbGwofiBnc3ViKCJmYWN0b3JfQSIsICJmYWN0b3JfQyIsIC4pKSAlPiUKICAgICAgICAgICAgICByZW5hbWVfYWxsKH4gZ3N1YigiZmFjdG9yX0IiLCAiZmFjdG9yX0QiLCAuKSkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lX2FsbCh+IGdzdWIoImZhY3Rvcl9EIiwgImZhY3Rvcl9BIiwgLikpICU+JQogICAgICAgICAgICAgIHJlbmFtZV9hbGwofiBnc3ViKCJmYWN0b3JfQyIsICJmYWN0b3JfQiIsIC4pKSkgJT4lIGRpc3RpbmN0KCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfcGhpIDwtIGRfcGhpICU+JQogIHNlbGVjdCgtY291bnRyeSwgLWFnZV9ncm91cCkgJT4lCiAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lCiAgICAgICAgICAgICAgZnVsbF9qb2luKGZhY3Rvcl9uYW1lc19jaGlsZHJlbikgJT4lCiAgICAgICAgICAgICAgcmVuYW1lX2FsbCh+cGFzdGUwKC4sICJfQSIpKSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9iaG1fQSA9IGNhc2Vfd2hlbigKICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpIH4gIkJvZHktbGlrZSBmYWN0b3IiLAogICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSkgfiAiTWluZC1saWtlIGZhY3RvciIsCiAgICBncmVwbCgiaGVhcnQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSkgfiAiSGVhcnQtbGlrZSBmYWN0b3IiLAogICAgVFJVRSB+ICJPdGhlciIpKSAlPiUKICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUKICAgICAgICAgICAgICBmdWxsX2pvaW4oZmFjdG9yX25hbWVzX2NoaWxkcmVuKSAlPiUKICAgICAgICAgICAgICByZW5hbWVfYWxsKH5wYXN0ZTAoLiwgIl9CIikpKSAlPiUKICBtdXRhdGUoZmFjdG9yX2JobV9CID0gY2FzZV93aGVuKAogICAgZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSkgfiAiQm9keS1saWtlIGZhY3RvciIsCiAgICBncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSB+ICJNaW5kLWxpa2UgZmFjdG9yIiwKICAgIGdyZXBsKCJoZWFydCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSB+ICJIZWFydC1saWtlIGZhY3RvciIsCiAgICBUUlVFIH4gIk90aGVyIikpICU+JQogIG11dGF0ZV9hdCh2YXJzKGZhY3Rvcl9iaG1fQSwgZmFjdG9yX2JobV9CKSwKICAgICAgICAgICAgfiBmYWN0b3IoLiwgbGV2ZWxzID0gYygiQm9keS1saWtlIGZhY3RvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlYXJ0LWxpa2UgZmFjdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWluZC1saWtlIGZhY3RvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk90aGVyIikpKSAlPiUKICBzZWxlY3QoLWNvdW50cnlfQiwgLWFnZV9ncm91cF9CKSAlPiUKICByZW5hbWUoY291bnRyeSA9IGNvdW50cnlfQSwgYWdlX2dyb3VwID0gYWdlX2dyb3VwX0EpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLCAsIGluY2x1ZGUgPSBGfQpkX3BoaSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBmYWN0b3JfYmhtX0EsIAogICAgICAgICAgICAgeSA9IHJlb3JkZXIoZmFjdG9yX2JobV9CLCBkZXNjKGZhY3Rvcl9iaG1fQikpLCAKICAgICAgICAgICAgIGZpbGwgPSBlc3RpbWF0ZSkpICsKICBmYWNldF9ncmlkKGNvdW50cnkgfiBhZ2VfZ3JvdXAsIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChlc3RpbWF0ZSwgMiksIG5zbWFsbCA9IDIpKSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMLCBmaWxsID0gcXVvdGUocGhpKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IEZ9CmRfcGhpICU+JQogIGdncGxvdChhZXMoeCA9IGZhY3Rvcl9iaG1fQSwgCiAgICAgICAgICAgICBjb2xvciA9IGNvdW50cnksCiAgICAgICAgICAgICAjIHNoYXBlID0gYWdlX2dyb3VwLAogICAgICAgICAgICAgeSA9IGVzdGltYXRlKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDUsIGNvbG9yID0gImdyYXk1MCIpICsKICBmYWNldF9ncmlkKGFnZV9ncm91cCB+IGZhY3Rvcl9iaG1fQiwgc2NhbGVzID0gImZyZWVfeCIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gbG93ZXIsIHltYXggPSB1cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyKSArCiAgIyBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKGVzdGltYXRlLCAyKSwgbnNtYWxsID0gMikpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoTkEsIDEpLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKDAsIDEsIDAuNSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHggPSBOVUxMLCB5ID0gcXVvdGUocGhpKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNywgaW5jbHVkZSA9IEZ9CmRfcGhpICU+JQogIGdncGxvdChhZXMoeCA9IGNvdW50cnksIAogICAgICAgICAgICAgY29sb3IgPSBjb3VudHJ5LAogICAgICAgICAgICAgZ3JvdXAgPSBhZ2VfZ3JvdXAsIHNoYXBlID0gYWdlX2dyb3VwLAogICAgICAgICAgICAgeSA9IGVzdGltYXRlKSkgKwogIGZhY2V0X2dyaWQoZmFjdG9yX2JobV9BIH4gZmFjdG9yX2JobV9CLCBzY2FsZXMgPSAiZnJlZV94Iiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsdHkgPSAyLCBjb2xvciA9ICJncmV5NTAiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gbG93ZXIsIHltYXggPSB1cHBlciksCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgIyBnZW9tX3RleHQoYWVzKHkgPSBpZmVsc2UoYWdlX2dyb3VwID09ICJhZHVsdHMiLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZSArIDAuMSwKICAjICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZSAtIDAuMDUpLAogICMgICAgICAgICAgICAgICBsYWJlbCA9IGZvcm1hdChyb3VuZChlc3RpbWF0ZSwgMiksIG5zbWFsbCA9IDIpKSwKICAjICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSkgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKE5BLCAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgwLCAxLCAwLjUpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh4ID0gTlVMTCwgeSA9IHF1b3RlKHBoaSksIAogICAgICAgc2hhcGUgPSAiQWdlIGdyb3VwIiwgc2l6ZSA9ICJBZ2UgZ3JvdXAiLCAKICAgICAgIGNvbG9yID0gIlNpdGUiKQpgYGAKCmBgYHtyfQpjYXQoIlVTIEFEVUxUU1xuIikKZWZhX3VzX2FkdWx0cyRQaGkKIyAoZWZhX3VzX2FkdWx0cyRQaGkpXjIKCmNhdCgiXG5VUyBDSElMRFJFTlxuIikKZWZhX3VzX2NoaWxkcmVuJFBoaQojIChlZmFfdXNfY2hpbGRyZW4kUGhpKV4yCmBgYAoKYGBge3J9CmNhdCgiR0hBTkEgQURVTFRTXG4iKQplZmFfZ2hfYWR1bHRzJFBoaQojIChlZmFfZ2hfYWR1bHRzJFBoaSleMgoKY2F0KCJcbkdIQU5BIENISUxEUkVOXG4iKQplZmFfZ2hfY2hpbGRyZW4kUGhpCiMgKGVmYV9naF9jaGlsZHJlbiRQaGkpXjIKYGBgCgpgYGB7cn0KY2F0KCJUSEFJTEFORCBBRFVMVFNcbiIpCmVmYV90aF9hZHVsdHMkUGhpCiMgKGVmYV90aF9hZHVsdHMkUGhpKV4yCgpjYXQoIlxuVEhBSUxBTkQgQ0hJTERSRU5cbiIpCmVmYV90aF9jaGlsZHJlbiRQaGkKIyAoZWZhX3RoX2NoaWxkcmVuJFBoaSleMgpgYGAKCmBgYHtyfQpjYXQoIkNISU5BIEFEVUxUU1xuIikKZWZhX2NoX2FkdWx0cyRQaGkKIyAoZWZhX2NoX2FkdWx0cyRQaGkpXjIKCmNhdCgiXG5DSElOQSBDSElMRFJFTlxuIikKZWZhX2NoX2NoaWxkcmVuJFBoaQojIChlZmFfY2hfY2hpbGRyZW4kUGhpKV4yCmBgYAoKYGBge3J9CmNhdCgiVkFOVUFUVSBBRFVMVFNcbiIpCmVmYV92dF9hZHVsdHMkUGhpCiMgKGVmYV92dF9hZHVsdHMkUGhpKV4yCgpjYXQoIlxuVkFOVUFUVSBDSElMRFJFTlxuIikKZWZhX3Z0X2NoaWxkcmVuJFBoaQojIChlZmFfdnRfY2hpbGRyZW4kUGhpKV4yCmBgYAoK